2012-02-11 6 views
0

src=""するpreg_match(..)

  • で捕獲者
  • に捕捉もの:background=""
  • に捕捉もの:background=''
  • に捕捉もの:に捕捉それらsrc=''
  • で捕獲者:中url('')
  • 捕獲者:url()

これまでのところ私が思いついた:

preg_match_all("/src=((\"|'|)?(.*\.(png|gif|jpg))(\"|'|))/Ui", $strHTML, $arrMatches); 

preg_match_all("/background=((\"|'|)?(.*\.(png|gif|jpg))(\"|'|))/Ui", $strHTML, $arrMatches); 

preg_match_all("/url\((\"|'|)?((.*\.(png|gif|jpg))(\"|'|))\)/Ui", $strHTML, $arrMatches); 

しかし、彼らは接頭辞を含まないという点で、それらが不完全です(src/background/url)。また、セキュリティを賢明にすれば、誰かが侵入するのを防ぐために、さらに改善できると思います。src="http://somesite.com/someurl.exe?ext=jpg"

正しい方向への助けに感謝します。

編集:

私はコードが確実に向上させることができるものの、おそらくは組み合わせおよび/または最適化された:)

/* match CSS url() links */ 

preg_match_all("/(url\((\"|'|)(.*\.(png|gif|jpg|jpeg))(\"|'|)\))/Ui", $strHTML, $arrMatches); 

Array 
(
    [0] => Array 
     (
      [0] => url('test1.gif') 
      [1] => url(test2.gif) 
      [2] => url("test3.gif") 
     ) 

    [1] => Array 
     (
      [0] => url('test1.gif') 
      [1] => url(test2.gif) 
      [2] => url("test3.gif") 
     ) 

    [2] => Array 
     (
      [0] => ' 
      [1] => 
      [2] => " 
     ) 

    [3] => Array 
     (
      [0] => test1.gif 
      [1] => test2.gif 
      [2] => test3.gif 
     ) 

    [4] => Array 
     (
      [0] => gif 
      [1] => gif 
      [2] => gif 
     ) 

    [5] => Array 
     (
      [0] => ' 
      [1] => 
      [2] => " 
     ) 

) 

/* match img links */ 
preg_match_all("/(src=(\"\'??)(.*\.(png|gif|jpg|jpeg))(\"\'??))/Ui", $strHTML, $arrMatches); 

/* match background links */ 
preg_match_all("/(background=(\"\'??)(.*\.(png|gif|jpg|jpeg))(\"\'??))/Ui", $strHTML, $arrMatches); 
+0

予想される出力を投稿して明確にすることはできますか?私はあなたが "接頭辞を含んでいない"ということをどういう意味か分かりません。また、コードがどのように使用されているかについての文脈がなくても、セキュリティに関するアドバイスが難しい。しかし、悪意のあるコードがアプリケーションに注入されるのを防ぐために正規表現に頼るべきではないと言えるでしょう。 –

+0

[A要素のhref属性を取得する]の複製が可能です。(http://stackoverflow.com/questions/3820666/grabbing-the-href-attribute-of-an-a-element) – Gordon

+0

[Parse Inline CSSの値とRegex](http://stackoverflow.com/questions/4432334/parse-inline-css-values-with-regex) – Gordon

答えて

4

、私はそれを得たと思うあなたは、これらの属性に関する確信している場合名前(src、url、およびbackground)...

$arr = array(
    'url("http://somesite.com/someurl.exe?src=jpg")', 
    'url(http://somesite.com/someurl.exe?src=jpg)', 
    'src="http://somesite.com/someurl.exe?src=jpg"', 
    'src="http://somesite.com/someurl.exe?ext=jpg"', 
    'background="http://somesite.com/someurl.exe?src=jpg"' 
); 
foreach ($arr as $str) { 
    preg_match_all('/(?<=src=|background=|url\()(\'|")?(?<image>.*?)(?=\1|\))/i',$str,$matches); 
    echo $str; 
    foreach($matches['image'] as $img) { 
     echo "\nimage: <b>$img</b>\n"; 
    } 
    echo "\n"; 
}