2009-05-23 13 views
1

Ich bin neu in PHP regex und die grundlegenden Muster verstehen jedoch die unten diejenigen ein wenig komplex sind, und ich verstehe nicht, was das folgende Muster entspricht:Wie passen diese Regex-Muster zusammen?

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

Könnte jemand bitte erklären ihnen?

Danke.

+3

Meine Augen, bluten sie :( – karim79

+0

schreiben Bitte die ganze Ausdrücke nicht nur die Hälfte davon. –

+0

FYI, PCRE ist die regex-Bibliothek, die preg_ Funktionen Befugnisse PHP. Ich diesen Tag entfernt, weil es nichts spezifisch für diese Bibliothek ist in Ihrer Frage –

Antwort

3

Kurz gesagt: Ersetzen Sie URLs durch Links.

Im Detail:

  1. Die erste regex beschreibt Sequenzen, die durch :// mit Wortzeichen ([\w]+), gefolgt beginnen, gefolgt von einem oder mehreren Zeichen des Satzes [\w\#$%&~/.\-;:=,[email protected]\[\]+].

    Das sollte wahrscheinlich mit einer URL übereinstimmen, die mit dem URL-Protokoll/Schema wie http://, https:// oder ftp:// beginnt.

    Aber es würde auch javascript:// übereinstimmen. Und das ist nicht gut: javascript://%0Aalert%28%22booo%21%22%29 den JavaScript-Code entspricht:

    // 
    alert("booo!") 
    
  2. Die zweite regex-Sequenzen beschrieben, die mit entweder beginnen www. oder ftp., wieder gefolgt von einem oder mehreren Zeichen des Satzes [\w\#$%&~/.\-;:=,[email protected]\[\]+].

    Das sollte wahrscheinlich URLs entsprechen, die gerade mit www. oder ftp. beginnen. Das URL-Protokoll/Schema wird dann zur URL hinzugefügt.

Verwandte Themen