preg_match для соответствия src =, background = и url (..) - PullRequest
0 голосов
/ 11 февраля 2012

Я хотел бы найти регулярное выражение, которое могло бы найти (в заданном HTML) следующие изображения:

  • Те, которые захвачены в: src=""
  • Те, которые захвачены в: src=''
  • Захваченные в: background=""
  • Захваченные в: background=''
  • Захваченные в: url("")
  • Захваченные в: 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"

Любая помощь в правильном направлении приветствуется.

edit:

Я думаю, что получил, хотя код, безусловно, можно улучшить, возможно, даже объединить и / или оптимизировать :) 1038

/* 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);

1 Ответ

4 голосов
/ 18 марта 2012

Если вы уверены в названиях этих атрибутов (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";
}
...