为什么这个正则表达式不起作用?

时间:2010-09-17 01:41:04

标签: php regex preg-match

1.txt的内容:

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

不起作用的代码:

<?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 "</pre>";
?>

我期待这个结果:

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 个答案:

答案 0 :(得分:4)

让它不合适:

$pattern = '/(images\/product_images\/original_images\/)(.*?)(\.jpg)/i';

答案 1 :(得分:2)

请记住,正则表达式是贪婪的。第二次捕获(.*)表示匹配除新行之外的任何字符(除非在mutliline模式下)。所以它可能正在捕捉其余部分。

您可以按照 Wrikken 的建议进行操作。但我喜欢确保我捕捉到我想要的东西。在您的情况下,它看起来像href属性的值。所以我真的想要至少1个字符,不能是引用,其次是jpg扩展名:

$pattern = '/(images\/product_images\/original_images\/)([^'"]+)(\.jpg)/i';

答案 2 :(得分:0)

这是基本的正则表达式:

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

答案 3 :(得分:-1)

使用正则表达式解析HTML。

使用正则表达式解析HTML。

使用正则表达式解析HTML。