2012-02-03 14 views
0
私は次のようにSRC = "URL" タグに一致するようにしようとしている

:基本的にIMGタグのSRC一致PHPの正規表現

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

、src属性の内部bp.blogspotのURLのsomreの並べ替えを持っているもの。私は、次のを持っているが、それは部分的にしか作業だ:

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

そして、何の意味 "部分的に取り組ん" でしょうか? – mario

+0

一部のテストデータとサンプルの結果は、この問題のトラブルシューティングに役立ちます。 –

+0

十分ではありませんが、src = "([^"] * bp \。blogspot \ .com [^ "] *)"は通常の場合と一致する必要があります。 – Kleenestar

答えて

3

この1つは、すべてのBlogSpotのURLを受け入れ、エスケープ引用符ことができます:

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

どのように動作するのかを気にしてください。 –

+1

@Kolink:そうです。 '[^]]'または '' 'の前に不平等な(したがってエスケープする)数の' \ 'が前置された接頭辞を受け入れます。次に、先行する 'b 'の前に文字(' \ b':単語の境界)を置かないように要求する 'blogspot.com'を検索し、接頭辞と同じ規則が適用される接尾辞を検索します。エスケープされたクォートを受け入れるには、派手なものが必要です。 – Regexident

+0

ええ、blogspotの2 bは意図的でしたか?また、何がエスケープされる必要がありますか?なぜなら、それらのトンがあるからです。 – joshholat