2009-08-23 7 views
20

Ich möchte jede Zeichenfolge, die nicht enthält die Zeichenfolge "DontMatchThis" übereinstimmen.C# Regex, um mit einer Zeichenfolge übereinzustimmen, die keine bestimmte Zeichenfolge enthält?

Was ist der Regex?

+0

Warum möchten Sie dies mit Regex tun und String.IndexOf nicht verwenden? –

+12

Weil manchmal Ihre Regex in der Konfig ist und Sie den Code nicht ändern können. Oder weil Sie es als Unterausdruck einer anderen komplexeren Regex benötigen. Oder aus einer Reihe von Gründen. Sie können auch fragen: "Warum bringen Sie Ihre Katze nicht dazu, den Text über das Medium des interpretativen Tanzes nachzuahmen?". Manchmal hast du deine Katze einfach nicht zur Hand. –

Antwort

45

versuchen Sie dies:

^(?!.*DontMatchThis).*$ 
+11

Einige Erklärung, bitte. Wie funktioniert das? – bikashg

+0

@bikashg: siehe hier: http://stackoverflow.com/a/11125488/47190 –

11

Die Regex einen String übereinstimmen, die nicht ein bestimmtes Muster enthält, wird

(?s)^(?!.*DontMatchThis).*$ 

Wenn Sie das Muster ohne (?s) verwenden (das ist eine Inline-Version Das RegexOptions.Singleline-Flag, das . mit einem LF-Zeilenvorschubzeichen sowie alle anderen Zeichen übereinstimmen), die DontMatchThis wird nur in der ersten Zeile gesucht, und nur eine Zeichenfolge ohne LF-Symbole wird mitübereinstimmen.

Muster Details:

  • (?s) - Beginn der Saitenanker
  • (?!.*DontMatchThis) - - ein DOTALL/Einlinige Modifikator . Spiel jedes Zeichen
  • ^ machen eine negative lookahead prüft wird, ob es eine 0 oder mehr Zeichen (abgestimmt mit gierigen .* Untermuster - HINWEIS ein faulerDie Version 0 (so wenig Zeichen wie möglich vor der nächsten Unterpatternübereinstimmung möglich) könnte den Job schneller erledigen, wenn DontMatchThis näher am Zeichenfolgenstart erwartet wird) gefolgt von DontMatchThis
  • .* - beliebig viele null oder mehr Zeichen, so viele wie möglich, bis
  • $ - das Ende der Zeichenfolge (siehe Ankerzeichen: Dollar ($)).
+1

Dies ist eine gute Ergänzung zu der angenommenen Antwort. – VMAtm

Verwandte Themen