2012-02-03 90 views
0

我想匹配像下面SRC = 「URL」 標籤:img標籤SRC匹配PHP正則表達式

src="http://3.bp.blogspot.com/-ulEY6FtwbtU/Twye18FlT4I/AAAAAAAAAEE/CHuAAgfQU2Q/s320/DSC_0045.JPG" 

基本上,任何有somre排序bp.blogspot URL的src屬性的內部。我有以下,但它只是部分工作:

preg_match('/src=\"(.*)blogspot(.*)\"/', $content, $matches); 
+3

什麼會 「部分工作」 是什麼意思? – mario 2012-02-03 00:48:52

+0

有些測試數據和示例結果可幫助您解決這個問題。 – 2012-02-03 00:59:51

+0

不夠強大,但src =「([^」] * bp \ .blogspot \ .com [^「] *)」應與正常情況匹配。 – Kleenestar 2012-02-03 01:30:56

回答

3

這一次接受所有的Blogspot網址,並允許轉義引號:

src="((?:[^"]|(?:(?<!\\)(?:\\\\)*\\"))+\bblogspot\.com/(?:[^"]|(?:(?<!\\)(?:\\\\)*\\"))+)" 

的URL被捕獲匹配組1

你將需要跳過\/以及額外的\(針對每個發生!)在preg_match(…)中使用。

說明:

src=" # needle 1 
(# start of capture group 
    (?: # start of anonymous group 
     [^"] # non-quote chars 
     | # or: 
     (?:(?<!\\)(?:\\\\)*\\") # escaped chars 
    )+ # end of anonymous group 
    \b # start of word (word boundary) 
    blogspot\.com/ # needle 2 
    (?: # start of anonymous group 
     [^"] # non-quote chars 
     | # or: 
     (?:(?<!\\)(?:\\\\)*\\") # escaped chars 
    )+ # end of anonymous group 
    ) # end of capture group 
" # needle 3 
+0

小心提供關於它如何工作的解釋? – 2012-02-03 01:09:38

+1

@Kolink:好的。它接受一個由'[^「]'或'」'前綴不均勻(因此轉義)數字的前綴''。然後它搜索'blogspot.com',要求前面的'b'前面不要有一個字母('\ b':字邊界),然後是一個與前綴相同規則的後綴。花哨的東西是接受逃脫報價所必需的。 – Regexident 2012-02-03 01:14:04

+0

是的,是在blogspot故意的2 b?另外,還有什麼需要逃避?因爲它們中有很多ha – joshholat 2012-02-03 01:15:08