13 votes

Comment faire correspondre un symbole dièse (#) dans une regex en php (pour les hashtags)

Très simple, je dois faire correspondre le # à l'aide d'une expression rationnelle. Je travaille sur un détecteur de hashtag.

J'ai essayé de chercher dans google et dans stack overflow. L'un des articles liés est le suivant aquí mais comme il voulait supprimer le symbole # de la chaîne, il n'a pas utilisé de regex.

J'ai essayé les expressions rationnelles /\b\#\w\w+/ y /\b#\w\w+/ et ils ne fonctionnent pas et si j'enlève les # il détecte le mot.

13voto

Niet the Dark Absol Points 154811

# n'a pas de signification particulière dans une expression rationnelle, sauf si vous l'utilisez comme délimiteur. Il suffit donc de l'insérer directement et cela devrait fonctionner.

Il convient de noter que \b détecte une limite de mot, et dans #abc , la limite des mots se situe après le # et avant le abc . Par conséquent, vous devez utiliser les \b est superflue et vous n'avez besoin que de #\w\w+ .

7voto

webbiedave Points 28781

Vous n'avez pas besoin de l'échapper (il s'agit probablement de la fonction \b qui le perturbe) :

if (preg_match('/^\w+#(\w+)/', 'abc#def', $matches)) {
    print_r($matches);
}

/* output of $matches:
Array
(
    [0] => abc#def
    [1] => def
)
*/

4voto

Lasse Nielsen Points 31

En ce qui concerne le commentaire sur la réponse précédente, vous voulez éviter de faire correspondre x#x . Dans ce cas, vous n'avez pas besoin \b mais \B :

\B#(\w\w+)

(si vous avez vraiment besoin de deux caractères ou plus après le #).

En \B signifie NON-limite de mots, et puisque # n'est pas un caractère de mot, cela correspond exactement si le caractère précédent n'est pas un caractère de mot.

0voto

Highway of Life Points 3795

Vous pouvez utiliser l'expression rationnelle suivante : /\#(\w+)/ pour faire correspondre un hashtag avec seulement le mot du hashtag, ou : /\#\w+/ correspondra à l'ensemble du hashtag, y compris le hash.

0voto

will Points 449

Pour ce que cela vaut, je n'ai réussi à faire correspondre qu'un caractère hash(#) à une chaîne de caractères. En awk, l'analyseur syntaxique supprime les commentaires en premier lieu. La seule syntaxe qui peut "contenir" un # est

"#"

Dans mon cas, j'ai donc supprimé les lignes ne comportant que des commentaires comme :

$1 == "#" { next; }

J'ai également essayé de faire du hachage une expression rationnelle :

HASH_PATTERN = "^#"

$1 ~ HASH_PATTERN { next; }

... Cette también œuvre. Je pense donc que vous pouvez mettre l'expression entière dans une chaîne de caractères comme : HASH_PATTERN.

L'équation de la chaîne fonctionne assez bien. Il ne s'agit pas d'une solution parfaite, mais d'une solution de départ.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X