2013-09-23 15 views
6

Kann mir jemand zeigen, wie man 4 Ziffern oder nichts in Regex? Ich habe RegexBuddy verwendet und bis jetzt habe ich das gefunden, aber der Hilfetext sagt 'Oder passen regulärer Ausdruck Nummer 2 unten - der gesamte Spielversuch schlägt fehl, wenn dieser' in Bezug auf das Muster nach der Rohr.Regex, Nummer oder leer

Ich möchte, dass einer der beiden eine positive Übereinstimmung bietet.

^\d{4}|$ 
+0

Die Regex oben richtig ist muss. Natürlich bedeutet^Startlinie und $ bedeutet Zeilenende, ich bin mir nicht sicher, ob das in Ihrem Szenario erforderlich wäre. Aber '\ d {4} |' bedeutet tatsächlich "4 Ziffern oder nichts". –

+0

Würde die tatsächliche Übereinstimmung mit 4 Ziffern oder gar nichts beginnen? 1234a würde also passen –

Antwort

11

Entweder 4 Ziffern oder nichts:

^(?:\d{4}|)$ 

Dies ist am nächsten, was Sie versuchten, machen.

ich gehen würde, für die folgenden für eine etwas kürzere:

^(?:\d{4})?$ 

^\d{4}|$ 

Das regex bedeutet entweder:

^\d{4} ODER $

Die erste wird passen einfach jede Zeichenfolge, die mit 4 Ziffern beginnt, während die zweite beginnt Melden Sie eine Übereinstimmung auf alles (es entspricht dem Ende einer Zeichenfolge, und da kein Zeichen angegeben ist, wird es das Ende aller Zeichenfolgen übereinstimmen).

Wenn Sie eine Gruppe verwenden, Sie bekommen:

Entweder ^(?:\d{4})$ oder ^(?:)$ (man beachte, dass die ‚Grenzen‘ des OR-Operator geändert), die dann entweder entspricht ^\d{4}$ oder ^$

+1

könnte es wert sein zu erklären, dass '^ \ d {4} | $' würde '1234a' entsprechen, weil das $ nicht in der ersten Übereinstimmung enthalten ist –

+0

@BobVale Ich könnte auch hinzufügen, dass'^\ d {4} | $ 'als Ganzes passt alles wegen' $ ':) – Jerry

2

Ich denke, Ihr Ansatz ist solide. Sie müssen allerdings Operator Vorrang im Auge behalten und verwenden entweder

^(\d{4}|)$ 

oder

^\d{4}$|^$ 
1

ich denke nicht, ob es ODER

^(\d{4})?$