Comment puis-je construire une expression rationnelle pour correspondre à un modèle tout en excluant certains mots connus qui correspondraient au modèle? Dans l'exemple, j'ai cette chaîne:
J'aime d.r.e.a.m à faire h i k i n g.
et j'ai la regex suivante: b (. {1,2} (s |. | - | _)) {2,}
Cela correspond à:
à d.r.e.a.m à
faire h i k i n g.
Ce que je veux, c'est changer cette expression rationnelle de manière à correspondre à:
rêver
randonnée.
Si je le change en ceci b ([^ (to)] {1,2} (s |. | - | _)) {2,}
cela fonctionnera partiellement, mais cela exclurait les lettres individuelles comme "t" "o" au lieu du mot entier "to"
Comment résoudre ceci?
Réponses:
2 pour la réponse № 1Vous pouvez utiliser
/b(?!(?:I|at|[td]o)b)w{1,2}(?:[W_](?!(?:I|at|[td]o)b)w{1,2})*b/
Voir cette démo Rubular
Ça correspond
b
- une limite de mots(?!(?:I|at|[td]o)b)w{1,2}
- suivi d'un mot de caractère de 1 ou 2 mots différent deI
,at
,to
oudo
(?:[W_](?!(?:I|at|[td]o)b)w{1,2})*
- 0+ répétitions de:[W_]
- un caractère autre qu'un mot ou_
(?!(?:I|at|[td]o)b)w{1,2}
- voir au dessus
b
- une limite de mot.