Regex pour correspondre à un modèle, mais exclure un ensemble de mots
J'ai été à la recherche par le biais de la SORTE et que cette question a été répondu dans un scénario:
Regex pour correspondre à tous les mots, sauf une liste donnée
Ce n'est pas tout à fait ce que je cherche. Je suis en train d'écrire une expression régulière qui correspond à toute chaîne de la forme [\w]+[(], mais qui ne correspond pas aux trois chaînes de caractères "cat(", "chien" et "le mouton(" en particulier.
J'ai été jouer avec d'anticipation et lookbehind, mais j'ai du mal à y arriver. J'ai peut-être de compliquer à l'excès ce, de sorte que toute aide serait grandement appréciée.
source d'informationauteur Huguenot | 2009-07-23
Vous devez vous connecter pour publier un commentaire.
Si l'expression régulière de la mise en œuvre prend en charge look-ahead ou look-derrière des affirmationsvous pouvez utiliser les éléments suivants:
À l'aide d'un négatif look-ahead affirmation:
À l'aide d'un négatif look-derrière l'affirmation:
J'ai ajouté le
\b
d'ancrage qui marque un limite de mot. Donccatdog(
serait correspondait bien qu'il contientdog(
.Mais tout look-ahead affirmations sont plus largement pris en charge par regex implémentations, la regex avec le look derrière affirmation est plus efficace car il n'est vérifiée que si le précédent regex (dans notre cas
\b\w+\(
) a déjà fait de match. Cependant le " look-ahead affirmation serait testé avant le réel regex serait de match. Donc, dans notre cas le " look-ahead affirmation est testé à chaque fois que\b
est mis en correspondance.Avez-vous vraiment besoin de ce dans une seule regex? Si non, alors l'implémentation la plus simple est juste deux regexes - le afin de vérifier que vous n'avez pas correspondre à l'un de vos mots interdits, et un seul pour correspondre à vos \w+, enchaîné par un ET logique.