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

je veux une expression qui échouera quand elle rencontrera des mots comme "boon.ini" et "http". L'objectif serait de prendre cette expression et d'être en mesure de construire pour un ensemble de mots-clés.

44
demandé sur Alan Moore 2008-09-22 23:05:50

7 réponses

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

(prises à partir d' RegexBuddy's library) correspondra à toute ligne qui ne contient pas boon.ini et/ou http. Est-ce que vous vouliez?

45
répondu Tim Pietzcker 2010-12-15 10:37:51

une autre expression qui pourrait être utilisée:

^(?!.*IgnoreMe).*$

^ = indique le début de la ligne

$ = indique la fin de la ligne

(?! Expression) = indique zéro largeur regarder à l'avance correspondance négative sur l'expression

^ à l'avant est nécessaire, sinon lorsque évalué le regard négatif à l'avant pourrait commencer quelque part à l'intérieur/au-delà du texte "IgnoreMe" - et faire une correspondance où vous ne voulez pas qu'il trop.

par exemple, Si vous utilisez la regex:

(?!.*IgnoreMe).*$

avec L'entrée "Hello IgnoreMe Please", Cela donnera quelque chose comme:" gnoreMe Please "car le regard négatif à venir trouve qu'il n'y a pas de chaîne complète "IgnoreMe" après le "I".

14
répondu Tim 2018-02-09 08:04:04

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

retour true si boon.ini ou http n'importe où dans votre chaîne. Il ne correspondra pas à des mots comme httpd ou httpxyzzy à cause de \b, ou des limites de mots. Si vous voulez, vous pouvez juste les enlever et il va correspondre à ceux-ci aussi. Pour ajouter plus de mots-clés, il suffit d'ajouter plus de tuyaux.

\b(boon\.ini|http|foo|bar)\b
13
répondu Justin Poliey 2008-09-22 19:14:08

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

Par exemple, en perl, vous pouvez utiliser:

if (!/boon\.ini|http/) {
    # the string passed!
}
4
répondu Nathan Fellman 2008-09-22 19:16:56
^[^£]*$

l'expression ci-dessus ne restreindra que le symbole de La Livre de la chaîne. Cela permettra à tous les caractères sauf string.

2
répondu Manikandan 2015-10-30 05:29:40

quelle langue/bibliothèque regexp? Je croyais que ta question était dans le coin. ASP.NET dans ce cas, vous pouvez voir la section "lookhead négatif" de cet article: http://msdn.microsoft.com/en-us/library/ms972966.aspx

strictement parler la négation D'une expression régulière, définit encore une langue régulière mais il y a très peu de bibliothèques/langues/outils qui permettent de l'exprimer.

lookahed négatif peut vous servir le même mais la syntaxe réelle dépend de ce que vous êtes en utilisant. Tim réponse est un exemple (?...)

1
répondu Remo.D 2008-09-22 19:29:20

j'ai utilisé ceci (basé sur la réponse de Tim Pietzcker) pour exclure les URL de sous-domaine non-production pour les filtres de profil de Google Analytics:

^\w+-*\w*\.(?!(?:alpha(123)*\.|beta(123)*\.|preprod\.)domain\.com).*$

Vous pouvez voir le contexte ici: Regex pour exclure les mots multiples

0
répondu Jon Kern 2013-10-29 17:33:43