2011-09-09 92 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

你的觀點是有道理的,因爲兩者都返回相同的東西,但什麼是正確的解決方案? –