51 votes

Expression régulière pour exclure un ensemble de mots-clés

Je veux une expression qui échoue lorsqu'elle rencontre des mots tels que "boon.ini" et "http". Le but serait de prendre cette expression et de pouvoir la construire pour n'importe quel ensemble de mots-clés.

53voto

Tim Pietzcker Points 146308
^(?:(?!boon\.ini|http).)*$\r?\n?

(extrait de RegexBuddy ) correspondra à toute ligne qui ne contient pas boon.ini et/ou http. C'est ce que vous vouliez ?

15voto

Tim Points 362

Une expression alternative qui pourrait être utilisée :

^(?!.*IgnoreMe).*$

^ = indique le début de la ligne
$ = indique la fin de la ligne
(?! Expression) = indique une correspondance négative de type look ahead de largeur zéro sur l'expression

El ^ à l'avant est nécessaire, sinon, lors de l'évaluation, le regard négatif vers l'avant pourrait partir de quelque part à l'intérieur/au delà du texte "IgnoreMe" - et faire une correspondance là où vous ne le souhaitez pas.

Par exemple, si vous utilisez le regex :

(?!.*IgnoreMe).*$

Avec l'entrée "Hello IgnoreMe Please", cela donnera quelque chose comme : "gnoreMe Please" car l'anticipation négative trouve qu'il n'y a pas de chaîne complète 'IgnoreMe' après le 'I'.

13voto

Justin Poliey Points 15038

Plutôt que de nier le résultat dans l'expression, vous devez le faire dans votre code. De cette façon, l'expression devient assez simple.

\b(boon\.ini|http)\b

Je reviendrais true si boon.ini ou http se trouvait quelque part dans votre chaîne. Il ne correspondra pas à des mots tels que httpd ou httpxyzzy en raison de l'utilisation de l'option \b ou les limites des mots. Si vous le souhaitez, vous pouvez les supprimer et le moteur de recherche les prendra en compte également. Pour ajouter d'autres mots-clés, il suffit d'ajouter d'autres tuyaux.

\b(boon\.ini|http|foo|bar)\b

4voto

Nathan Fellman Points 31310

Vous pourriez être bien servi en écrivant une regex qui va réussir lorsqu'il rencontre les mots que vous recherchez, puis inverser la condition.

Par exemple, en perl vous utiliseriez :

if (!/boon\.ini|http/) {
    # the string passed!
}

2voto

Manikandan Points 29
^[^£]*$

L'expression ci-dessus restreindra uniquement le symbole de la livre de la chaîne. Ceci autorisera tous les caractères sauf la chaîne de caractères.

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