Ho bisogno di un'espressione regolare per descrivere una stringa che contiene un minimo di tre (3) e un massimo di sei (6) di numeri a 2 cifre e numeri a 3 cifre in qualsiasi ordine. I numeri dovrebbero essere separati da #
ma potrebbe anche contenere spazi. Esempi di questa stringa sono:
34 #563# 23
123#678#12#44# 45
risposte:
4 per risposta № 1Cosa ne pensi di questo:
^s*d{2,3}s*(?:#s*d{2,3}s*){2,5}$
Spiegazione:
^ # Start of string
s* # optional whitespace
d{2,3} # match a number (2 to 3 digits)
s* # optional whitespace
(?: # Match...
# # - a hashmark
s* # - optional whitespace
d{2,3} # - a number
s* # - optional whitespace
){2,5} # 2 to 5 times
$ # End of string
2 per risposta № 2
/d{2,3}(?:s*#s*d{2,3}){2,5}/
Spiegazione:
d
Cattura una cifra.
{2,3}
Due o tre volte, quindi:
(?: ...)
raggruppa quanto segue, ma non catturare ciò che il gruppo stesso cattura.
s*
Cattura zero o più spazi ...
#
... un cancelletto.
s*
... zero o più spazi ...
d{2,3}
e un altro numero di due o tre cifre.
{2,5}
Fai quel gruppo da due a cinque volte, per un totale di tre o sei numeri.
Per forzare la corrispondenza con una stringa completa, è possibile aggiungere ^s*
all'inizio e s*$
alla fine, come ^
corrisponde all'inizio di una stringa, e $
Alla fine, ma in realtà mi consiglia di utilizzare solo il carato e il simbolo del dollaro e l'utilizzo di a trim
funzione invece, perché s*
(o davvero, e *
) è super inefficiente. Con una o due corde, non è un grosso problema, ma se si dice: estraendo numeri da una rubrica telefonica, si avrà un brutto momento.