2009-08-25 6 views
1

je la chaîne suivante:PHP Regex Aide pour hashtags

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

Je voudrais envelopper certains html autour de ceux qui ont la balise de hachage devant eux, pour exampe:

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

Ce qui va afficher:

#hello comment sont #you et #you et #Vous

Notez que chaque lien URL n'a pas l'étiquette de hachage dans le lien.

Cependant, ceci est mon problème, car il n'y a pas d'espace à la fin du dernier #you il ne correspond pas à l'expression régulière et n'est évidemment pas inclus. Je ne suis pas sûr de ce qu'il faut faire, car certains peuvent avoir des espaces après, et d'autres pas, mais je ne veux pas inclure l'espace dans la sortie (d'où le (? =)) Mais je ne sais pas quoi d'autre peut faire.

Toute aide serait grandement appréciée.

Merci à l'avance

Répondre

3

utilisation (\ s | \ Z), qui correspondra soit des espaces ou à la fin de ligne

+0

Wow, merci pour votre réponse rapide et très agréable. J'ai fait une modification de plus pour ne pas inclure les espaces dans les URL retournées, donc l'expression rationnelle finale est: /@ ([A-Za-z0-9 _] +) (? = \ S | \ Z)/ Parfait, merci beaucoup ennuikiller. Y a-t-il quelque chose que je puisse faire pour vous en tant que geste de remerciement? –

+0

@jamie votre appréciation est plus que suffisant geste! Peut-être que vous répondrez à une de mes questions, pas le temps! – ennuikiller

+0

je voulais dire "prochaine" bien sûr! – ennuikiller

1

Vous pouvez changer le sélecteur du mode d'exclure tel que ([^, .] +). Ainsi devrait fonctionner pour toutes les instances.

+0

Merci pour votre réponse, j'ai aussi essayé cela et fonctionne aussi bien que la regex ci-dessus (voir le commentaire dans la réponse ci-dessus). Merci encore pour votre réponse rapide! –