2013-09-23 22 views
6

Qualcuno può mostrarmi come abbinare 4 cifre o niente in Regex? Ho usato RegexBuddy e finora ho trovato questo, ma il testo della guida sta dicendo 'Oppure corrisponde all'espressione regolare numero 2 sotto - l'intero tentativo di corrispondenza fallisce se questo non riesce a corrispondere a' rispetto al modello dopo il tubo.Regex, numero o vuoto

Vorrei che uno dei due fornisse una corrispondenza positiva.

^\d{4}|$ 
+0

L'espressione regolare sopra è corretta. Naturalmente^significa inizio riga e $ significa fine riga, non sono sicuro se nel tuo scenario sarebbe necessario. Ma '\ d {4} |' in effetti significa "4 cifre o niente". –

+0

Se ciò corrisponde effettivamente inizia con 4 cifre o nulla. Quindi 1234a corrisponderebbe a –

risposta

11

O 4 cifre o nulla:

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

questo è più vicino a quello che si stava tentando di fare.

vorrei andare per quanto segue per un po 'più corto:

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

^\d{4}|$ 

Ciò regex significa sia:

^\d{4} O $

Il primo corrisponderà solo qualsiasi stringa che inizia con 4 cifre mentre il secondo lo farà segnala una corrispondenza su su tutto (corrisponde alla fine di una stringa e poiché non viene specificato alcun carattere, corrisponderà alla fine di tutte le stringhe).

Quando si utilizza un gruppo, che stai ricevendo:

Sia ^(?:\d{4})$ o ^(?:)$ (si noti che i 'limiti' l'operatore OR cambiato), che è poi equivalente ad uno o ^\d{4}$ o ^$

+1

potrebbe valere la pena di spiegare che '^ \ d {4} | $' corrisponderebbe a '1234a' perché $ non è incluso nella prima corrispondenza –

+0

@BobVale Potrei anche aggiungere che'^\ d {4} | $ 'nel suo insieme corrisponderà a qualsiasi cosa a causa di' $ ':) – Jerry

2

Penso che il tuo approccio sia valido. Si ha bisogno di mantenere la precedenza degli operatori a mente, però e utilizzare sia

^(\d{4}|)$ 

o

^\d{4}$|^$ 
1

non credo se ha bisogno O

^(\d{4})?$ 
Problemi correlati