0

正規表現:

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を一致させることです。

4

2 に答える 2

2

正規表現パターンの修正は次のとおりです。

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) 
于 2012-08-16T14:45:18.310 に答える
2

文字を区切り文字として使用して|いますが、正規表現でも使用しています。

たとえば、次のような問題を回避するために、別の文字を使用して正規表現を大文字と小文字を区別しないようにすることをお勧めします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)
于 2012-08-16T14:53:52.580 に答える