2009-05-23 8 views
1

私はPHPでregexで、以下のものは少し複雑で、私は次のパターンが一致したのか理解していないが、基本的なパターンを理解するために新しいです:これらの正規表現パターンは何に一致しますか?

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

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

誰かがそれを説明してくださいもらえますか?

ありがとうございました。

+3

私の目に、彼らは:( – karim79

+0

ブリード全体の表現にそれらの半分だけでなく、投稿してください。 –

+0

FYIそのライブラリに固有のものは何もありませんので、PCREは、その権力PHPのpreg_機能を正規表現ライブラリです。私は、そのタグを削除 –

答えて

3

要約すると、URLをリンクで置き換えます。具体的には

  1. 最初の正規表現は、セット[\w\#$%&~/.\-;:=,[email protected]\[\]+]の一つ以上の文字が続く://続く単語文字([\w]+)で始まる配列を、記載されています。

    http://https://ftp://などのURLプロトコル/スキームで始まるURLと一致するはずです。

    でも、javascript://と一致します。そして、それはよくないです:javascript://%0Aalert%28%22booo%21%22%29はJavaScriptコードに等しい:

    // 
    alert("booo!") 
    
  2. 第二の正規表現が再びセット[\w\#$%&~/.\-;:=,[email protected]\[\]+]の一つ以上の文字が続き、www.またはftp.のいずれかで始まるシーケンスを説明しています。

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

関連する問題