我无法使这个正则表达式工作

时间:2016-09-22 07:04:37

标签: php regex

可能很简单,但我做不到。 我有两个文件名字符串: wrap.html 包裹-popup.html

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

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

1 个答案:

答案 0 :(得分:0)

考虑字符串“这是带有2个html页面的文本:wrap.html和wrap-popup.html”

第一个正则表达式/.*wrap.*\.htm.*/将匹配整个字符串。

因此,如果您不想包含字符串的第一部分,则需要删除第一部分。*

现在/wrap.*\.htm.*/将匹配字符串中的“wrap.html and wrap-popup.html”。

那是因为第一个。*是一个贪婪的比赛。

所以,当我们将正则表达式更改为/wrap.*?\.html?/。*?现在是一个懒惰的比赛。 l?是可选的l。因此正则表达式将返回“wrap.html”。

但是如果我们想要检索两者,我们需要全局搜索,否则它只会找到第一个匹配。

带有正则表达式/wrap[\w\-]*?\.html?/的preg_match_all(而不是preg_match)将匹配“wrap.html”和“wrap-popup.html”。

你的第二个正则表达式与wrap.html不匹配,因为.+预期“匹配”和点之间至少有1个字符。