2016-09-22 26 views
-1

可能很简单,但我不能做到这一点。 我有两个文件名字符串: wrap.html 总结popup.html我不能让这个正则表达式工作

我尽量选择使用两种 /.*wrap.*\.htm.*/ mask 但它只匹配的第一个“wrap.html”。 如果我使用/.*wrap.+\.htm.*/,它只匹配第二个“wrap-popup.html”

我认为*对无限字符听起来0。 什么是正确的掩码来选择两个字符串?

+1

你的第一个正则表达式匹配[both](https://regex101.com/r/dU4qV1/1)。 –

+0

请发布一个完整的代码示例,演示您遇到的问题。目前的问题包含的细节太少,给我们提供了太多的替代方案,可能是实际问题。 – ChristianF

回答

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个字符。

+0

这个问题用PHP标记。为什么'/ g'? –

+0

可能是因为我用Perl编写了更多; p。现在修复。 – LukStorms

相关问题