Lua non ha espressioni regolari, soprattutto perché un pieno regolare la libreria di espressioni sarebbe più grande di Lua stessa.
Cosa Lua ha invece sono matching patterns, che sono molto meno potente (ma ancora sufficiente per molti casi d'uso):
- Non v'è alcun addetto al "limite di parola",
- alternative,
- e anche senza lookahead o simili.
Penso che non ci sia un modello Lua che corrisponda a tutte le possibili occorrenze della stringa, e nessun altro, il che significa che in qualche modo devi aggirare questo problema.
Il modello proposto da Stuart, %d*%.?%d*
, corrisponde a tutti i numeri decimali (con o senza un punto), ma corrisponde anche alla stringa vuota, che non è molto utile. %d+%.?%d*
corrisponde a tutti i numeri decimali con almeno una cifra prima del punto (o senza un punto), %d*%d.?%d+
corrisponde a tutti i numeri decimali con almeno una cifra dopo il punto (o senza un punto). %.%d+
corrisponde ai numeri decimali senza una cifra prima del punto.
Una soluzione semplice sarebbe cercare più di uno di questi modelli (ad esempio, sia %d+%.?%d*
e %.%d+
) e combinare i risultati. Poi guarda i luoghi in cui li hai trovati e guarda se c'è un "]" che li segue.
Ho sperimentato un po 'con lo frontier pattern.
Il modello %f[%.%d]%d*%.?%d*%f[^%.%d%]]
partite tutti i numeri decimali che sono preceduti da qualcosa che non è né cifre né punto (o per nulla), e seguita da qualcosa che non è né ]
né cifre né punto (o per niente). Tuttavia, corrisponde anche al singolo punto.
fonte
2011-05-31 19:11:48
A proposito, la tua espressione regolare non corrisponde esattamente a ciò che vuoi che corrisponda. Corrisponde alla stringa vuota, ma non corrisponde a '.11'. –
Risolto il problema, non era realmente necessario :) – Goles
Inoltre non corrisponde a '0.11' ... si desidera un' * 'invece di'? 'Dopo il secondo' [0-9] ', penso. (E forse uno dei '*' è un '+' per evitare di far corrispondere la stringa vuota.) –