2016-03-21 22 views
0

Nach könnte akzeptierten Formate werdenRegulärer Ausdruck Basierend auf Bedingung in Java

(CCC|CC|CCN)/(NNNN-NNNNNNNN) 
OR 
(CCC|CC|CCN)/NN/(NN-NNNNN) 

Wo C repräsentiert Zeichen [AZ] und N Nummer [0-9]

Ich schaffe 2 regelmäßig zu erstellen Ausdruck sowohl die Bedingungen anzupassen,

^[A-Z]{2}[A-Z|0-9]{0,1}/\d{4,8}$ 
OR 
^[A-Z]{2}[A-Z|0-9]{0,1}/\d{2}/\d{2,5}$ 

Ist es möglich, sie in einem einzigen regulären Ausdruck zu verschmelzen, basierend auf Zustand auf/(dh Anzahl des Schrägstrichs)?

Probe Gültige Beispiele könnten sein: -


MAT/1234 
XP/1234 
XW1/12345678 

XU/12/34 
KLY/12/34567 
RT1/23/45678 
+1

Haben Sie einige gültige Beispiele, gegen die Sie sich bewerben können? –

+1

Es gibt ein _oder_ Symbol '|' für reguläre Ausdrücke. – khelwood

+0

@ brso05: Lesen Sie die Frage erneut. C und N sind nur Notationen für Zeichen und Zahlen. –

Antwort

0

UPDATE Um die beiden folgenden Muster zu einer Einheit verschmelzen:

^[A-Z]{2}[A-Z|0-9]{0,1}/\d{4,8}$ 
OR 
^[A-Z]{2}[A-Z|0-9]{0,1}/\d{2}/\d{2,5}$ 

Sie könnten versuchen:

^[A-Z]{2}[A-Z|0-9]{0,1}/\d{2}(?:\d{2,6}|/\d{2,5})$ 

REGEX DEMO

+0

Sie haben '|' im ersten Teil verwendet und Ihr Regex entspricht 'AA |/1111'. Das ist falsch. Wenn Sie '|' daraus entfernen, ist das richtig. –

+0

@noob: Du hast Recht. Es entspricht 'AA |/1111'. Aber OP sucht nicht nach Änderungen der ursprünglichen Muster. – Quinn

+0

Ja, aber das ist nicht die Art, wie du ODER in der Charakterklasse sagst. Es könnte verwirrend sein zu denken, warum eine akzeptierte Lösung '|' verwendet hat, wenn es nichts zu OR gibt. Die Zeichenklasse selbst bezeichnet eines der darin genannten Zeichen. –

1

Basierend auf dem aktuellen Format kam ich mit dieser Regex auf.

Nun noch nicht sicher, ob OP nach Format 1111-11111111 oder Zahlen mit der Länge von 4 bis 8 sucht. So werde ich Lösung für beide Fälle geben, die in Zukunft jemandem nützlich sein könnten.

Für Format:(NNNN-NNNNNNNN) OR NN/(NN-NNNNN)

Regex:^([A-Z]{2}[A-Z0-9]?)\/((\d{4}-\d{8})|(\d{2}\/\d{2}-\d{5}))$

Regex101 Demo


für L ength von Zahlen in Bereich von 4 bis 8 und 2 5

Regex:^([A-Z]{2}[A-Z0-9]?\/)(\d{4,8}|\d{2}\/\d{2,5})$

Regex101 Demo

+1

^([AZ] {2} [A-Z0-9]? \ /) (\ D {4,8} | \ d {2} \/\ d {2,5}) $ Diese Lösung funktioniert auch und viel einfacher. Vielen Dank :) –

0

Nun, habe ich etwas länger regex:

(?im)^([a-z]{2}[\\da-z]?)/(\\d{4}\\-\\d{8}|\\d{2}/\\d{2}\\-\\d{5})$ 

Siehe Demo unter regex101

matches:

AA2/2222-22222222 
AAA/2222-22222222 
AA/2222-22222222 

AA2/22/22-22222 
AA/22/22-22222 
AAB/22/22-22222 

ABER NICHT

AA2A/2222-22222222A 
AAA/2222-222A22222 
AA/2222-222222223 

2A2/22/22-222222 
3AA/22/22-22222 
1AB/22/22-22222 
+0

Sie sollten erwähnen, dass Sie 'i' Flag für Groß-/Kleinschreibung verwenden. Es ist in deinem Beispiel sichtbar, aber was ist, wenn ein Noob wie ich es direkt von hier kopiert? : P –

+0

gut .... wenn jemand wie du das tust, werde ich wahrscheinlich aufhören: P ich erwarte sowieso OP weiß was da ist. – Saleem

+1

Das ist in Ordnung. Aber meine Frage ist, warum hier überhaupt mit der Groß-/Kleinschreibung umgehen? OP erwähnte '[A-Z]' explizit. Es wäre eine Verwirrung. Sie können es jedoch als Randnotiz hinzufügen. –