我不能让这个正则表达式工作
可能很简单,但我不能做到这一点。 我有两个文件名字符串: wrap.html 总结popup.html我不能让这个正则表达式工作
我尽量选择使用两种 /.*wrap.*\.htm.*/ mask
但它只匹配的第一个“wrap.html”。 如果我使用/.*wrap.+\.htm.*/
,它只匹配第二个“wrap-popup.html”
我认为*对无限字符听起来0。 什么是正确的掩码来选择两个字符串?
考虑字符串“这是文本与2个html页面:wrap.html和包裹式popup.html”
第一个正则表达式/.*wrap.*\.htm.*/
将是整个字符串匹配。
所以,如果你不想在这样的字符串的第一部分,那么你需要删除第一。*
现在/wrap.*\.htm.*/
将匹配“wrap.html和包裹式popup.html”从字符串。
这是因为第一。*是一个贪婪的匹配。
所以,当我们改变正则表达式来/wrap.*?\.html?/
的。*?现在是一场懒散的比赛。并且l?
是可选的l
。所以正则表达式将返回“wrap.html”。
但是,如果我们想同时检索,我们需要一个全球性的搜索,或者也只是发现的第一个匹配。
preg_match_all(而不是preg_match)与正则表达式/wrap[\w\-]*?\.html?/
将匹配“wrap.html”和“wrap-popup.html”。
你的第二个正则表达式不匹配wrap.html,因为.+
期望在“匹配”和点之间至少有1个字符。
这个问题用PHP标记。为什么'/ g'? –
可能是因为我用Perl编写了更多; p。现在修复。 – LukStorms
你的第一个正则表达式匹配[both](https://regex101.com/r/dU4qV1/1)。 –
请发布一个完整的代码示例,演示您遇到的问题。目前的问题包含的细节太少,给我们提供了太多的替代方案,可能是实际问题。 – ChristianF