Почему это регулярное выражение не работает? - PullRequest
0 голосов
/ 17 сентября 2010

Содержимое 1.txt:

Image" href="images/product_images/original_images/9961_1.jpg" rel="disable-zoom:false; disable-expand: false"><img src="im

Код, который не работает:

<code><?php
$pattern = '/(images\/product_images\/original_images\/)(.*)(\.jpg)/i';
$result = file_get_contents("1.txt");
preg_match($pattern,$result,$match);

echo "<h3>Preg_match Pattern test:</h3><br><br><pre>";
print_r($match);
echo "
";?> *

Ожидается такой результат:

Array
(
    [0] => images/product_images/original_images/9961_1.jpg
    [1] => images/product_images/original_images/
    [2] => 9961_1
    [3] => .jpg
)

Но я так понимаю:

Array
(
    [0] => images/product_images/original_images/9961_1.jpg" rel="disable-zoom:false; disable-expand: false"> 
    [1] => images/product_images/original_images/
    [2] => 9961_1.jpg" rel="disable-zoom:false; disable-expand: false"> 
)

Мне надоело пробовать миллион комбинаций этого регулярного выражения. Не знаю, что не так. Пожалуйста, большое спасибо!

Ответы [ 4 ]

4 голосов
/ 17 сентября 2010

Сделайте это несносным:

$pattern = '/(images\/product_images\/original_images\/)(.*?)(\.jpg)/i';
2 голосов
/ 17 сентября 2010

Помните, что регулярные выражения являются жадными.Ваш второй захват (.*) говорит, что соответствует любому символу, кроме новой строки (если только не в режиме мутлин).Так что, вероятно, он захватывает оставшуюся часть линии.

Вы можете сделать ее несвязной, как предложено Wrikken .Но мне нравится следить за тем, что я хочу.В вашем случае это выглядит как значение атрибута href.Так что на самом деле я хочу по крайней мере 1 символ, не может быть кавычкой, а затем расширение jpg:

$pattern = '/(images\/product_images\/original_images\/)([^'"]+)(\.jpg)/i';
0 голосов
/ 17 сентября 2010

Do not анализ HTML с регулярным выражением.

Do not анализ HTML с регулярным выражением.

Do not parseHTML с регулярным выражением.

0 голосов
/ 17 сентября 2010

Вот основное регулярное выражение:

href="((.*/)(.*?)(.jpg))"
...