Regex pour Correspondre à l'Espace Blanc ou en Fin de Chaîne
J'essaie de trouver tous les cas de @nom d'utilisateur dans le commentaire de texte et de le remplacer par un lien. Voici mon PHP:
$comment = preg_replace('/@(.+?)\s/', '<a href="/users//">@</a> ', $comment);
Le seul problème est la regex est tributaire de l'existence d'espaces après le @nom d'utilisateur de référence. Quelqu'un peut-il m'aider à le tordre, donc il trouvera également si c'est à la fin de la chaîne?
OriginalL'auteur Kirk Ouimet | 2010-03-22
Vous devez vous connecter pour publier un commentaire.
essayer
/@(\w+)/
au lieu de/@(.+?)\s/
.simplement correspond à " mot " caractère: A-Za-z0-9_
OriginalL'auteur J-16 SDiZ
Pour détecter les espaces ou en fin de chaîne, vous pouvez utiliser:
/@(.+?)(?=\s|$)/
, mais à moins que vos noms d'utilisateur contient des caractères non alphanumériques, il est plus simple d'utiliser la\w
pour les caractère de mot ou\b
de coupure de mot, c'est à dire:/@(.+?)\b/
ou/@(\w)+/
.$comment = preg_replace('/@(.+?)(?:\s|$)/', '<a href="/users/${1}/">@${1}</a>${2}', $comment);
Oui, mais dans ce cas, vous devrez utiliser une capture d'un groupe (suppression de la
?:
).C'était vraiment utile! Merci pour l'espace blanc à fixer
(?=\s|$)
une grande une grande aide pour la regexly-aux personnes en difficultés! Merci pour ce truc.OriginalL'auteur Max Shawabkeh