RegEx e corrispondenti codici da destra a sinistra
Domanda
stuggling un po 'con la regex, ho 4 codici in una stringa
code4: CODE3: CODE2: CODE1
ogni codice è opzionale a parte CODE1
Così ho potuto avere ab: bc: de: fg
o
bc :: fg
di
ab ::: fg
In ogni caso di quanto sopra CODE1 = fg ND per il caro vita di me non riesco a capire l'espressione regolare
Sarebbe facile da fare come un parse stringa standard, ma unforunatly a causa di oggetti buisness in deve essere fatto tramite :-( regex e restituire attraverso un vb.net RegEX.matche, gruppi ( "Code1") fg (I spero che abbia un senso)
Grazie in anticipo per qualsiasi aiuto
finito con un po 'di RegEx che fa il lavoro, un po' disordinato, ma funziona
(^(?<code1>[\w]*)$)|(^(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code4>[\w]*):(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)
Ta
Soluzione
Non c'è bisogno di usare un'espressione regolare qui.
Non so che lingua si sta utilizzando, ma dividere la stringa su ':' e avrete una serie di codici
.Se davvero si vuole solo convalidare se una stringa è valida per questo allora
/(\w*:){0,3}\w+/
corrisponde descrizione ed i pochi esempi che hai dato.
Altri suggerimenti
Non sono sicuro che il motivo per cui si deve corrispondere i codici da destra a sinistra. Basta usare un'espressione regolare per scegliere a parte la stringa:
/(.*):(.*):(.*):(.+)/
e poi ci sono CODE1 a $ 4, CODE2 a $ 3, CODE3 a $ 2, code4 in $ 1.
(CODE1)?:(CODE2)?:(CODE3)?:CODE4
avrebbe funzionato - se il leader: non importa. In caso contrario, se non si può avere due punti principali, enumerare:
(CODE1:(CODE2)?:(CODE3)?:|CODE2:(CODE3)?:|CODE3)?CODE4
Non c'è niente di speciale circa il fatto che il più a destra parte è obbligatoria, e la più a sinistra le parti non sono.