我是绝望的,试图让John Grubers网址识别正则表达式正常工作!我写的简单函数总是返回false,即使其中有明显的URL!
我正在尝试测试2个不同功能中的任何网址和网络特定网址。我是Regexs的新手,所以这几乎可以肯定我!
功能:
<?php
function isweburl($url)
{
return(preg_match("(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?: [^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`! ()\[\]{};:'\".,<>?«»“”‘’]))", $url));
}
function isanyurl($url)
{
echo "suspected url:$url<br>";
return(preg_match("/(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?: [^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`! ()\[\]{};:'\".,<>?«»“”‘’]))/", $url));
}
$test=isanyurl('http://www.sega.com');
var_dump($test);
echo "<br>web test:<br>";
$test=isweburl('http://www.sega.com');
var_dump($test);
?>
提前感谢您的帮助!
答案 0 :(得分:1)
以下是你的正则表达式
我认为preg_match需要一个正则表达式分隔符“/ regex /”或“〜正则表达式”。
但是,如果您使用分隔符作为正则表达式正文中的字符,则必须对其进行转义。
"
(?i)\b
(
(?:
https?://
| www\d{0,3}[.]
| [a-z0-9.\-]+[.][a-z]{2,4}/
)
(?:
[^\s()<>]+
| \(
(
[^\s()<>]+
|
(
\([^\s()<>]+\)
)
)*
\)
)+
(?:
\(
(
[^\s()<>]+
|
(
\([^\s()<>]+\)
)
)*
\)
| [^\s`! ()\[\]{};:'\".,<>?«»“”‘’]
)
)
"
由于您使用/
作为字符,请尝试使用其他分隔符
扩展 -
"~
(?i)\b
(
(?:
https?://
| www\d{0,3}[.]
| [a-z0-9.\-]+[.][a-z]{2,4}/
)
(?:
[^\s()<>]+
| \(
(
[^\s()<>]+
|
(
\([^\s()<>]+\)
)
)*
\)
)+
(?:
\(
(
[^\s()<>]+
|
(
\([^\s()<>]+\)
)
)*
\)
| [^\s`! ()\[\]{};:'\".,<>?«»“”‘’]
)
)
~x"