0

我绝望地试图让 John Grubers URL 识别正则表达式正常工作!我写的这个简单函数总是返回 false,即使里面有一个明显的 URL!

我正在尝试在 2 个不同的函数中测试任何 url 和特定于 web 的 url。我对正则表达式相当陌生,所以这几乎可以肯定是我!

功能:

<?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);
?>

提前感谢您的帮助!

4

1 回答 1

1

下面是你的正则表达式。
我认为 preg_match 需要一个正则表达式分隔符“/ regex /”或“~ 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"
于 2012-05-30T22:31:01.923 回答