Question

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

Était-ce utile?

La solution

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

(extrait de la bibliothèque de RegexBuddy ) correspondra à toute ligne ne contenant pas boon.ini et / ou http. Est-ce ce que tu voulais?

Autres conseils

Une autre expression pouvant être utilisée:

^(?!.*IgnoreMe).*$

^ = indique le début de la ligne
$ = indique la fin de la ligne
(?! Expression) = indique que la largeur est nulle face à la correspondance négative sur l'expression

Le code ^ à l'avant est nécessaire, sinon l'analyse négative de l'avenir pourrait commencer quelque part à l'intérieur / au-delà du texte "IgnoreMe" - et créer une correspondance là où vous ne le souhaitez pas. .

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

(?!.*IgnoreMe).*$

Avec l'entrée "Hello IgnoreMe Please", vous obtiendrez quelque chose comme: "gnoreMe Please" " lorsque le regard négatif à venir montre qu'il n'y a pas de chaîne complète 'IgnoreMe' après le 'I'.

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

Renverrait true si boon.ini ou http se trouvait n'importe où dans votre chaîne. Il ne correspondra pas à des mots tels que httpd ou httpxyzzy à cause du \ b , ou des limites de mots. Si vous le souhaitez, vous pouvez simplement les supprimer et cela correspond à ceux-là aussi. Pour ajouter plus de mots-clés, ajoutez simplement plus de tubes.

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

vous pourriez être bien servi en écrivant une regex qui réussira quand il rencontrera les mots que vous recherchez, puis inversera la condition.

Par exemple, en perl, vous utiliseriez:

if (!/boon\.ini|http/) {
    # the string passed!
}
^[^£]*$

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

Quelle bibliothèque de langue / regexp? Je pensais que votre question concernait ASP.NET, auquel cas vous pouvez voir le "regard négatif". section de cet article: http://msdn.microsoft.com/en-us/library/ms972966. aspx

À proprement parler, la négation d’une expression régulière définit toujours un langage ordinaire, mais très peu de bibliothèques / langages / outils permettent de l’exprimer.

Lookahed négatif peut vous servir la même chose, mais la syntaxe réelle dépend de ce que vous utilisez. La réponse de Tim est un exemple avec (? ...)

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

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

Vous pouvez voir le contexte ici: Une expression régulière pour exclure plusieurs mots

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top