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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top