2011-09-09 55 views
0

这里PHP正则表达式的preg_match是模式:出不寻常的行为

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

我曾经遇到过一个奇怪的错误,我博格尔斯。

当我搜索对一个字符串像'power-tool-world.com'它GIMPS它并返回'ower-tool-world.com'(去除P),但是当我使用任何其他字母(在其他字母未测试),它工作正常,所以'cower-tool-world.com'回报'cower-tool-world.com'能有人帮我明白为什么,但更重要的是给我一个不会导致这个问题的解决方案?

回答

2

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

+2

不完全。 '[^ http://]'匹配除* h,t,p,:或/之外的任何字符。当然'^(https?://)?'是更好的选择。 –

+0

不,尽管你可能在正确的轨道上,但你的解决方案返回一个错误,说power-tool-world.com不匹配 –

+0

你的观点是有道理的,因为两者都返回相同的东西,但什么是正确的解决方案? –