2013-09-23 17 views
6

Czy ktoś może mi pokazać, jak dopasować 4 cyfry lub nic w Regex? Używam RegexBuddy i jak dotąd wymyśliłem to, ale tekst pomocy mówi "Lub dopasuj wyrażenie regularne nr 2 poniżej - cała próba dopasowania nie powiedzie się, jeśli nie uda się dopasować" w odniesieniu do wzorca po rura.Regex, numer lub pusty

Chciałbym, aby któryś z nich dał pozytywny wynik.

^\d{4}|$ 
+0

regex powyżej jest poprawne. Oczywiście^oznacza początek linii, a $ oznacza koniec linii, nie jestem pewien, czy w twoim scenariuszu byłaby wymagana. Ale "\ d {4} |" w rzeczywistości oznacza "4 cyfry lub nic". –

+0

Czy to dopasowanie zaczyna się od 4 cyfr lub nic. Więc 1234a będzie pasować do –

Odpowiedz

11

Albo 4 cyfry albo nic:

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

To jest najbliżej tego, co staraliśmy się zrobić.

pójdę na następujące dla nieco krótszy:

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

^\d{4}|$ 

To wyrażenie regularne oznacza:

^\d{4} LUB $

Pierwszy będzie pasował tylko dowolny ciąg zaczynający się od 4 cyfr, a drugi ciąg zgłoś mecz na wszystko, co (pasuje do końca łańcucha, a ponieważ nie zostanie podany żaden znak, będzie dopasowywał koniec wszystkich ciągów znaków).

Kiedy używasz grupę, dostajesz:

Albo ^(?:\d{4})$ lub ^(?:)$ (zauważ, że „granice” z operatorem OR zmienione), która jest następnie równoważne obu ^\d{4}$ lub ^$

+1

może być warte wyjaśnienia, że ​​'^ \ d {4} | $' pasuje do '1234a', ponieważ $ nie jest zawarte w pierwszym dopasowaniu –

+0

@BobVale I może również dodać, że'^\ d {4} | $ 'jako całość dopasuje wszystko z powodu' $ ':) – Jerry

2

Myślę, że twoje podejście jest rozsądne. Trzeba zachować pierwszeństwo operatora pamiętać jednak i używać zarówno

^(\d{4}|)$ 

lub

^\d{4}$|^$ 
1

nie sądzę, czy potrzebuje LUB

^(\d{4})?$ 
Powiązane problemy