Domanda

La scorsa notte ho deciso di imparare Regex per creare un "test" Parser di script e ho eseguito con successo in termini di variabili :)

Questo è l'AS3 Regexp che uso per analizzare le variabili (non sono sicuro se questo può essere semplificato, ma questo è ciò che è entrato nella mia mente):

/\s*>(\w+)\s*=\s*(?:(?:"(.*?)")|>(\w+))\s*/gsm
.

Le variabili analizzate prendono questo formato (esempio 1):

>ReferenceTestVariable = "Hello World"
.

o .. (Esempio 2):

>TestVariable2 = >ReferenceTestVariable
.

Il problema è con i raggruppamenti e non so come procedere correttamente, ma questa è la mia uscita Regexp per esempio 1 come array

 [1]=ReferenceTestVariable, [2]=Hello World, [3]=
.

E questo è l'uscita per esempio 2:

 [1]=TestVariable2, [2]=, [3]=ReferenceTestVariable
.

Come modificherei l'operatore del gruppo dopo che il = per renderlo in modo che l'indice [2] e [3] venisse unito a vedere come indice 2 e 3 sono i valori dei negozi delle variabili?Anche come vorrei modificare il regexp per consentire a qualcosa del genere:

>Test = "String", >Referencevariable, "Another String", "More strings", >Variable2
.

È stato utile?

Soluzione

Penso che questo dovrebbe farlo:

/\s*>(\w+)\s*=\s*(".*?"|>\w+)/gsm
.

index[2] avrà citazioni attorno a esso nel caso 1 o iniziare con > nella causa 2.

Per fare il secondo, sarebbe:

/\s*>(\w+)\s*=\s*((?:(?:".*?"|>\w+)\s*,\s*)*(?:".*?"|>\w+))/gsm
.

Tuttavia, quando lo fai, tutti i valori separati da virgola si trovano insieme in index[1].I motori di espressione regolari non generalmente forniscono un modo per ottenere ciascuno dei valori corrispondenti da un * o + separatamente.

demo

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