繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM