Semplificando backreferences

1

Questo è un esempio teorico per ragioni di semplicità. Uso valori flat nella regex per renderlo facilmente leggibile per quasi tutti, dal momento che un sacco di {,(,[,\ è tutto inceppato insieme può essere un mal di testa da leggere.

Supponiamo di avere il seguente codice.

<input type="text" value="test" name="thing">
<input type="text" name="thing" value="test">

E volevo estrarre gli attributi di nome e valore da ciascun input, nonché i valori per ciascuno di questi attributi.

Potrei farlo

(?:(name)="(thing)" (value)="(test)"|(value)="(test)" (name)="(thing)")

Per la prima riga, i backreferences corrispondono come segue

$5: value
$6: test
$7: name
$8: thing

Per la seconda riga, i backreferences corrispondono come segue

$1: name
$2: thing
$3: value
$4: test

Raccogliere dai due pattern è abbastanza facile, quando sono solo due pattern

{$1$5: "$2$6", $3$7: "$4$8"}

È questo l'unico modo per farlo? Questa è più solo una curiosità. Poiché i primi quattro corrisponderanno, o i secondi quattro corrisponderanno, c'è qualche tipo di flag o carattere speciale per rendere il secondo set restituito come $1, $2, $3, $4 , piuttosto che 5-8?

In questo caso particolare, potrei farlo

(?:(name|value)="([^"]*)" (name|value)="([^"]*)")

E poi

{$1: "$2", $3: "$4"}

Questa è principalmente una curiosità in modo che io possa migliorare i RE che produco in futuro.

Mi rendo conto che se c'è comunque un modo per farlo, ogni lato della pipe dovrebbe avere un numero uguale di sottoespressioni (perché molte lingue, se non possono corrispondere a un backreference, mostrano semplicemente il backreference. esempio.

([A-Z]*)([0-9]*)

Creazioni di backreferences $ 1 e $ 2, quindi l'utilizzo di quelle sostituisce il testo con il riferimento corrispondente, ma molte lingue mostrerebbero semplicemente $ 3 anziché sostituirlo con niente o visualizzare un errore.

Per quanto riguarda le lingue che uso (dal momento che alcune funzionalità di supporto che altri non lo fanno), sono principalmente Cold Fusion (che si basa sulla piattaforma Java), Java, Javascript / JQuery, e uso regex frequentemente in Notepad ++.

    
posta Regular Joe 15.11.2014 - 02:00
fonte

0 risposte

Leggi altre domande sui tag