2008-09-22 9 views

Répondre

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

(tirée de la bibliothèque de RegexBuddy) correspondra une ligne qui ne contient pas boon.ini et/ou http. Est-ce ce que tu voulais?

13

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

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

reviendriez true si boon.ini ou http était partout dans votre chaîne. Il ne correspondra pas à des mots comme httpd ou httpxyzzy en raison des limites de mots \b. Si vous le souhaitez, vous pouvez simplement les supprimer et cela correspondra également à ceux-ci. Pour ajouter plus de mots-clés, ajoutez simplement plus de tuyaux.

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

vous pourriez être bien servi en écrivant une 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! 
} 
1

Quelle bibliothèque langue/regexp? Je pensais que vous question portait sur ASP.NET dans ce cas, vous pouvez voir la section « lookhead négative » de cet article: http://msdn.microsoft.com/en-us/library/ms972966.aspx

négation à proprement parler d'une expression régulière, définit encore une langue régulière, mais il y a très peu de bibliothèques/languages ​​/ tool qui permettent de l'exprimer. Négatif lookahed peut vous servir le même mais la syntaxe réelle dépend de ce que vous utilisez. La réponse de Tim est un exemple avec (?...)

14

Une autre expression qui pourrait être utilisé:

^(?!.*IgnoreMe).*$ 

^ = indique le début de la ligne
$ = indique la fin de la ligne
(?! Expression) = indique regard largeur zéro correspondance négative à l'avant sur l'expression

Le ^ à l'avant est nécessaire, sinon évalué le regard négatif L'annonce peut commencer quelque part dans/au-delà du texte "IgnoreMe" et faire une correspondance là où vous ne le souhaitez pas.

par exemple. Si vous utilisez l'expression régulière:

(?!.*IgnoreMe).*$ 

Avec l'entrée « Bonjour IgnoreMe S'il vous plaît », cela se traduira par quelque chose comme: « gnoreMe S'il vous plaît » comme le regard négatif trouve l'avance qu'il n'y a pas de chaîne complète « IgnoreMe » après le "je".

2
^[^£]*$ 

L'expression ci-dessus limitera uniquement le symbole dièse de la chaîne. Cela permettra à tous les caractères sauf la chaîne.

0

J'ai utilisé cette (fonction de la réponse Tim Pietzcker) pour exclure les URL de sous-domaine non-production pour les filtres de profil Google Analytics:

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

Vous pouvez voir ici le contexte: Regex to Exclude Multiple Words

Questions connexes