PHP Regex preg_match显示异常行为

时间:2011-09-09 10:19:35

标签: php regex preg-match

以下是模式:

$urlpattern = '%[^http://][^https://][\w]+(-[\w]+)*(\.[\w]+(-[\w]+)*)*\.[\w]{1,6}(\.[\w]{1,6})*[^/]%';

我遇到了一个让我困惑的奇怪的错误。

当我搜索像'power-tool-world.com'这样的字符串时,它会对它进行搜索并返回'ower-tool-world.com'(删除p)但是当我使用任何其他字母(未在其他所有字母上测试)时它工作正常,所以'cower-tool-world.com'返回'cower-tool-world.com'有人可以帮我理解原因,但更重要的是给我一个不会导致此问题的解决方案吗?

1 个答案:

答案 0 :(得分:2)

错误在第一部分。当您使用方括号时,您匹配其中一个字符,因此[http://]匹配h,t,p,:和/,这些字符将从下一个匹配组中排除。您应该使用^(http://|https://)?代替。