正则表达式:
https?://([a-zA-Z0-9-_]{1,50}[.])*[a-zA-z0-9-_]{1,50}[.]([(org)(gov)(com)]{3}|[(us)(fi)]{2})
测试人员:
http://regex.powertoy.org/
守则:
if(preg_match_all('|https?://([a-zA-Z0-9-_]{1,50}[.])*[a-zA-z0-9-_]{1,50}[.]([(org)(gov)(com)]{3}|[(us)(fi)]{2})|',$row['text'],$links))
{
print_r($links[0]);
/*for($x=0;$x<count(links[0]);$x++)
{
$row['text'] = str_replace($links[0][$x], 'link' . $link[0][$x] . 'link', $row['text'];
}*/
}else{
echo 'Failure!';
}
正则表达式很好地匹配测试器中的 URL,但在 HTML/PHP 前端中根本不匹配。 我不确定问题是什么。 正则表达式/代码的要点基本上是匹配 URL,而不管子域的数量如何。
正则表达式模式的修复是:
https?:'/'/(?:['w-]{1,50}'.)*['w-]{1,50}'.(?:org|gov|com|us|fi)
但我建议使用:
https?:'/'/(?:[a-zA-Z'd]+(?:'-[a-zA-Z'd]+)*'.)+(?:org|gov|com|us|fi)
您使用|
字符作为分隔符,但也在正则表达式中使用它。
我建议使用另一个字符并使正则表达式不区分大小写,以避免诸如例如a-zA-z
的问题:
preg_match_all('#https?://([a-zA-Z0-9-_]{1,50}[.])*[a-zA-z0-9-_]{1,50}[.]([(org)(gov)(com)]{3}|[(us)(fi)]{2})#i',$row['text'],$links)