[英]Why is this regular expression not working?
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">
)
我厌倦了尝试使用此正则表达式的上百万种组合。 我不知道怎么了 请,并非常感谢!
使其不贪心:
$pattern = '/(images\/product_images\/original_images\/)(.*?)(\.jpg)/i';
请记住,正则表达式是贪婪的。 您的第二个捕获(.*)
表示匹配换行以外的任何字符(除非在多行模式下)。 因此,它可能正在捕获其余部分。
您可以按照Wrikken的建议将其设置为不满意 。 但是我想确保自己捕捉到了想要的东西。 就您而言,它看起来像href
属性的值。 因此,实际上我想要至少一个字符,不能为引号,后跟jpg扩展名:
$pattern = '/(images\/product_images\/original_images\/)([^'"]+)(\.jpg)/i';
这是基本的正则表达式:
href="((.*/)(.*?)(.jpg))"
不要用正则表达式解析HTML。
不要用正则表达式解析HTML。
不要用正则表达式解析HTML。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.