我尝试了很多规则来找到一个带有preg_match()的网址,这对于普通的网址工作正常,但是当我尝试找到一个特殊字符的网址时,这个网址会被切断。
示例:
<?php
$string = 'http://url.com/!abcd1234 http://url.com/#abcd1234 https://url.com/abcd1234 http://url.com/abcd1234 https://url.com/abc/d1234?123=123';
$rule='@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@';
$search = preg_match_all($rule, $string, $find);
foreach ($find[1] as $fn){
echo $fn;
}
?>
返回:
http://url.com/!
http://url.com/#abcd1234
https://url.com/abcd1234
http://url.com/abcd1234
https://url.com/abc/d1234?123=123
似乎所有网址都很好用,但第一个确实是“http://url.com/!abcd1234”并且只返回到!焦炭。我想是因为! char是一种否定。
存在解决方案,不要出现这个问题?网址可以有!或不,这是我的问题,因为该规则应适用于所有人。
阅读要求:)
答案 0 :(得分:2)
替换
$rule='@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@';
与
$rule='@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#!-]*(\?\S+)?[^\.\s])?)?)@';
正在努力......