2016-04-05 7 views

Antwort

6

Sie können eine negative Vorschau verwenden, um ein generischen [0-9]{2} Muster zu beschränken:

^(?!00)[0-9]{2}$ 

die regex demo

Die [0-9]{2} wird genau 2 Stellen anzeigen lassen. Der (?!00)negative lookahead wird einmal am Anfang des Strings ausgeführt und stellt sicher, dass es bis zum Ende des Strings keine 00 gibt. Wenn die Zeichenfolge gleich 00 ist, wird keine Übereinstimmung gefunden.

Weitere Informationen finden Sie unter How Negative Lookahead Works.

Eine detaillierte Muster Erklärung:

  • ^ - Beginn der Zeichenfolge
  • (?!00) - ein negativer Look-Ahead, die das Spiel schlägt fehl, wenn es zwei 0 s direkt nach der aktuellen Position ist (am Anfang der Zeichenfolge). Da das nächste Untermuster - [0-9]{2}$ - nur 2 Symbole in der Zeichenfolge zulässt, müssen wir keinen Anker in den Lookahead einfügen. In anderen Szenarien ist es ein Muss, $ hinzuzufügen, um einfach 00 ausschließen zu können.
  • [0-9]{2} - genau zwei (dank der Begrenzung quantifier {min(,max)?}) Ziffern (in den meisten Aromen, [0-9] mit \d ersetzt werden, aber die \d kann auch mehr als normale [] in einige der Aromen entsprechen)
  • $ - Ende String (abhängig von der Regex-Geschmack, \z kann vorzuziehen sein, da es die sehr Ende der Zeichenfolge entspricht).
1

dieses RegEx Versuchen:

(?!00)\d\d 

Live Demo on Regex101

Dieses eine Negative Lookahead verwendet (hier ist ein nice answer es zu erklären), (?!). Das bedeutet, was auch immer innen ist, passt nicht zusammen. In diesem Fall erkennt es, ob 00 vorhanden ist, und schlägt fehl, wenn dies der Fall ist.Wenn nicht, wählen Sie 2 Ziffern (\d ist eine Abkürzung für [0-9])


Eine sicherere Version:

^(?!00)\d\d$ 

Live Demo on Regex101

Dies nutzt auch ^, in dem es heißt, dass die Daten sein müssen am Anfang der Zeichenfolge (oder Zeile mit dem m Flag) und $ müssen die Daten am Ende sein. Deshalb, wenn Sie ^ $ verwenden, innerhalb der Daten die volle Linie/string


Hier sind einige Beispiele für negative Vorschau übereinstimmen: (?! 00)

# Using the RegEx (?!9)\d 
1 # Match 
2 # Match 
5 # Match 
9 # NO MATCH 

# Using the RegEx (?!Tom)\w+ 
Tim # Match 
Joe # Match 
Bob # Match 
Tom # NO MATCH 

# Using the RegEx (?!Foo)\w+(?!Bar) 
BarBazFoo # Match 
BazBarFoo # Mtach 
FooBarBaz # NO MATCH 
BazFooBar # NO MATCH 
+0

'\ d \ d' wird auch match '99' in' 9900'. –

+0

@ WiktorStribiżew Ich dachte, es gäbe nur 2 Ziffern, zumal du '{2}' in deiner Antwort benutzt hast. Wenn dies der Fall ist, wird '9900' niemals existieren. Aber danke für die Information! – Druzion

+0

Ein begrenzender Quantifizierer gibt nicht an, wie viele Zeichen in der Eingabe enthalten sein sollten, sondern wie viele der vorherigen Untermuster übereinstimmen können. –

Verwandte Themen