2009-06-26 3 views
0

Ich habe kürzlich mit einer einfachen Twitter API für PHP gearbeitet und bin auf diesen Code gestoßen, um @username mit twitter.com/username zu verlinken. Leider schafft dieser Code es so @username Links zu http://twitter.com/@username, was zu einem Fehler führt. Es gibt viele Teile dieses Codes, die ich nicht verstehe, wie zum Beispiel^\ v und andere (siehe unten). Kann mir jemand erklären, was sie bedeuten?preg_replace(), und die dazugehörigen Abkürzungen?

$ret = preg_replace('/(^|[^\w])(@[\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">$2</a>' ,$ret); 
+0

http://www.phpro.org/tutorials/Introduction-to-PHP-Regex.html#30 (der Spickzettel Abschnitt) in der Lage sein sollte, Helfen Sie ein wenig. – jimyi

Antwort

2

einfache:

$ret = preg_replace('/(^|[^\w])@([\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">@$2</a>' ,$ret); 

Der einzige Unterschied ist die @ aus der Erfassungsgruppe verschoben wurde, was bedeutet, es manuell in der Verbindung mit dem Ausgang hinzugefügt werden muss.

Auch \ w enthält Ziffern, so dass das \ d überflüssig ist. So können Sie einfach es an:

$ret = preg_replace('/^|([^\w])@([\w\-]+)/', '\\1<a href="http://twitter.com/$2">@$2</a>' ,$ret); 
1

das @, Gebrauch zu entfernen:

$ret = preg_replace('/(^|[^\w])@([\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">$2</a>' ,$ret); 

Dies das @ außerhalb der von der zweiten Capture-Gruppe sehen

Auch http://www.regular-expressions.info/ für einige ausgezeichnete Informationen bewegt auf regulären Ausdrücken (in mehreren Sprachen)

1

Nun, um Ihre Frage zu beantworten, bedeutet ^\v, dass das erste Zeichen ein "vertikaler Raum sein muss "Charakter. Im Grunde bedeutet es, dass "beginnt mit einer leeren neuen Zeile"

EDIT: Sieht aus wie Sie eigentlich die viel häufiger ^\w bedeutet, die bedeutet "muss mit einem 'Wort' Zeichen beginnen." Das heißt, ein Buchstabe oder eine Nummer.

können Sie herausfinden, was alle diese Zeichen bedeuten here