1

私はPHPの正規表現に不慣れで、基本的なパターンを理解していますが、以下のパターンは少し複雑で、次のパターンが何に一致するかを理解していません。

$ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#... "<a href='' rel='nofollow'></a>", $ret);

$ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*... "<a href='http://' rel='nofollow'></a>", $ret);

誰か説明してもらえますか?

ありがとう。

4

2 に答える 2

3

つまり、URLをリンクに置き換えます。

詳細に:

  1. [\w]+最初の正規表現は、単語文字( )で始まり、その後://に、セットの1つ以上の文字が続くシーケンスを記述します[\w\#$%&~/.\-;:=,?@\[\]+]

    http://これは、、、、などのURLプロトコル/スキームで始まるURLと一致する可能性がありhttps://ますftp://

    しかし、それも一致しjavascript://ます。そしてそれは良くありません:javascript://%0Aalert%28%22booo%21%22%29JavaScriptコードに等しい:

    //
    alert("booo!")
    
  2. www.2番目の正規表現は、またはのいずれかで始まり、ftp.その後にセットの1つ以上の文字が続くシーケンスを記述します[\w\#$%&~/.\-;:=,?@\[\]+]

    www.これはおそらく、またはで始まるURLと一致するはずftp.です。次に、URLプロトコル/スキームがURLに追加されます。

于 2009-05-23T15:54:02.737 に答える
2

RegexBuddyを入手すると、正規表現の意味が説明されます(スクリーンショットを参照)。SOには、それを示す別の回答があります。

とにかく、preg_replacesの2番目の引数によれば、それらはURLと一致し、タグ付けする必要があります。

于 2009-05-23T15:49:02.003 に答える