2009-08-25 9 views
1

Ich habe die folgende Zeichenfolge:PHP Regex Hilfe für Hashtags

$str = '#hello how are #you and #you and #you'; 

Ich möchte einige html um solche, die den Hash-Tag vor ihnen haben wickeln, für exampe:

echo preg_replace("/#([A-Za-z0-9_]+)(?=)/", "<a href='http://url.com/$1'>$0</a>", $str); 

welche folgende Ausgabe:

#hello wie sind #you und #you und #you

Beachten Sie, dass jeder URL-Link nicht das Hash-Tag in der Verknüpfung hat.

Das ist jedoch mein Problem, weil am Ende der letzten # kein Platz ist, da es nicht mit der Regex übereinstimmt und natürlich nicht enthalten ist. Ich bin mir nicht sicher, was ich wirklich tun soll, da einige Leerzeichen haben können und andere nicht, aber ich möchte den Raum nicht in die Ausgabe einschließen (daher das (? =)), Aber ich weiß nicht, was ich sonst noch kann tun können.

Jede Hilfe würde sehr geschätzt werden.

Vielen Dank im Voraus

Antwort

3

Gebrauch (\ s | \ Z) diese entweder Leerzeichen übereinstimmen oder die End-of-line

+0

Wow, danke für deine schnelle und sehr nette Antwort. Ich habe eine weitere Änderung daran vorgenommen, um den Leerraum in den zurückgegebenen URLs nicht einzuschließen, also lautet die letzte Regex: /@ ([A-Za-z0-9 _] +) (? = \ S | \ Z)/ Perfekt, vielen Dank ennuikiller. Kann ich Ihnen etwas als Geste des Dankes geben? –

+0

@jamie deine Wertschätzung ist mehr als genug Geste! Vielleicht wirst du eine meiner Fragen nicht rechtzeitig beantworten! – ennuikiller

+0

ich meinte "nächste" Zeit natürlich! – ennuikiller

1

Sie den Wahlschalter auf den Modus auszuschließen wechseln wie ([^, .] +). So sollte für alle Instanzen funktionieren.

+0

Vielen Dank für Ihre Antwort, ich habe es auch versucht und funktioniert auch so gut wie die oben genannten Regex (siehe Kommentar in der obigen Antwort). Nochmals vielen Dank für Ihre schnelle Antwort! –