0

私は必死になって、正規表現を認識する John Grubers の URL を適切に機能させようとしています! 私が書いた単純な関数は、あからさまな URL が含まれていても、常に false を返します!

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 に答える