2017-10-17 26 views
0

Ich versuche, einen regulären Ausdruck für dieses Szenario zu berechnen:regulärer Ausdruck mit oder Fall

die ID muss mit dem Buchstaben ‚M‘ beginnen und ende mit drei Ziffern, aber triple Nullen sind nicht erlaubt.

Ich habe versucht,

M(00[1-9]) 

Das funktioniert aber nur auf dreifache Nullen zu blockieren, wie kann ich für die anderen Ziffern sorgen?

+0

So etwas wie M ([0-9] {2} [1-9]) – Gunner

+1

@Gunner Aber wenn die ersten beiden Ziffern keine 0s sind, könnte die letzte eine 0 sein, so dass das Muster nicht wäre Arbeit. –

+0

Negativer Lookahead für Triple Zero. –

Antwort

3

Der einfachste Weg, wahrscheinlich mit einem negativen Look-Ahead ist:

M(?!0{3})\d{3} 

[Regex101]

Diese wörtlichen M einstimmt, überprüft, dass das nächste, was nicht Null verdreifachen wird, entspricht dann drei Ziffern.

Wenn Sie einen bestimmten Satz von Ziffern blockieren möchten, können Sie Ihre Look-Ahead ändern für bestimmte wiederholte Ziffern (0, 2 5, 6 hier) zu überprüfen:

M(?!([0256])\1{2})\d{3} 

[Regex101]

Um nach allen dreistelligen Ziffern zu suchen, ersetzen Sie [0256] durch \d. Diese Regex führt die Lookahead-Überprüfung für eine Ziffer durch und testet dann, ob sie zweimal mit einer Rückreferenz wiederholt wird.

Eine weniger redundante Art und Weise könnte sein, die Capture-Gruppe außerhalb des Look-Ahead zu setzen:

M(\d)(?!\1{2})\d{2} 

[Regex101]

Diese Version sagt eine Stelle zu erfassen, stellen Sie sicher, dass es nicht noch zwei Mal wiederholt , dann erfassen Sie zwei weitere Ziffern.

+0

Danke für die Veröffentlichung, wird meine löschen. –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ Entschuldigung, ich bin auf Handy, aber nicht mit der App. Habe nicht einmal bemerkt, dass es andere Antworten gab. –

+0

Vielen Dank! Wusste nicht, dass es so kompliziert wäre. Neu hier zu regex. – NewbieCoder