2008-09-22 12 views

Antwort

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

(von RegexBuddy ‚s Bibliothek genommen) wird jede Linie entsprechen, die nicht boon.ini und/oder http enthält. Ist es das was du wolltest?

13

Anstatt das Ergebnis innerhalb des Ausdrucks zu negieren, sollten Sie dies in Ihrem Code tun. Auf diese Weise wird der Ausdruck ziemlich einfach.

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

Würde wieder true wenn boon.ini oder http überall in Ihrem String ist. Es wird Wörter wie httpd oder httpxyzzy wegen der \b oder Wortgrenzen nicht übereinstimmen. Wenn du willst, kannst du sie einfach entfernen und es wird auch mit ihnen übereinstimmen. Fügen Sie weitere Pipes hinzu, um weitere Keywords hinzuzufügen.

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

Sie könnten gut bedient werden, indem Sie eine Regex schreiben, die erfolgreich, wenn es die Wörter, die Sie suchen, und dann die Bedingung invertieren.

Zum Beispiel in Perl werden Sie verwenden:

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

Welche Sprache/regexp-Bibliothek? Ich dachte, Sie war um ASP.NET in Frage, in dem Fall, dass Sie die „negative lookhead“ Abschnitt dieses Artikels sehen: http://msdn.microsoft.com/en-us/library/ms972966.aspx

Streng genommen Negation eines regulären Ausdrucks definiert noch eine reguläre Sprache, aber es gibt nur sehr wenige Bibliotheken/Sprachen/Werkzeug, das es ausdrücken kann.

Negative Lookahed kann Ihnen das gleiche dienen, aber die tatsächliche Syntax hängt davon ab, was Sie verwenden. Tims Antwort ist ein Beispiel mit (?...)

14

Einem alternativen Ausdruck, der verwendet werden könnte:

^(?!.*IgnoreMe).*$ 

^ = gibt den Beginn der Zeile
$ = zeigt das Ende der Zeile
(?! Expression) = Null anzeigt Breite Blick Vorne negative Übereinstimmung über den Ausdruck

Die ^ an der Vorderseite ist erforderlich, sonst bei der Auswertung der negativen aussehen ahe Die Anzeige könnte von irgendwo innerhalb des/jenseits des 'IgnoreMe'-Textes starten - und eine Übereinstimmung herstellen, wo Sie sie auch nicht möchten.

z.B. Wenn Sie die regex verwenden:

(?!.*IgnoreMe).*$ 

Mit dem Eingang „Hallo IgnoreMe Bitte“, führt dies wird in so etwas wie: „gnoreMe Bitte“, wie der negativen Vorgriff findet, dass es keine vollständige Zeichenfolge ‚IgnoreMe‘ nach das i'.

2
^[^£]*$ 

Der obige Ausdruck beschränkt nur das Pfund-Symbol von der Zeichenfolge. Dies ermöglicht alle Zeichen außer Zeichenfolge.

0

ich verwendet, um dieses (basierend auf Tim Pietzcker Antwort) auf nicht-Produktion Sub-Domain-URLs für Google Analytics-Profil Filter ausschließen:

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

Sie den Kontext hier sehen können: Regex to Exclude Multiple Words

Verwandte Themen