Reticolo lua per estrarre / sostituzione del valore / /
-
30-09-2019 - |
Domanda
Ho una stringa come hello /world today/
Ho bisogno di sostituire /world today/
con /MY NEW STRING/
Lettura del manuale che ho trovato
newString = string.match("hello /world today/","%b//")
che posso utilizzare con gsub
per sostituire, ma mi chiedevo c'è anche un modo elegante per tornare solo il testo tra il /
, so che ho potuto solo tagliare, ma mi chiedevo se ci fosse un modello.
Soluzione
Prova qualcosa di simile a una delle seguenti:
-
slashed_text = string.match("hello /world today/", "/([^/]*)/")
-
slashed_text = string.match("hello /world today/", "/(.-)/")
-
slashed_text = string.match("hello /world today/", "/(.*)/")
Questo funziona perché string.match
restituisce eventuali acquisizioni dal modello, o l'intero testo corrispondente se non ci sono catture. La chiave è quindi fare in modo che il modello ha la giusta quantità di golosità, ricordando che i modelli Lua non sono un linguaggio completo delle espressioni regolari.
I primi due dovrebbero corrispondere gli stessi testi. Nella prima, ho espressamente richiesto che il pattern match come molti non-slash possibile. La seconda (grazie LHF) corrisponde minor lasso di caratteri affatto seguiti da una barra. Il terzo è avido, che corrisponda alla larghezza massima di caratteri che può ancora essere seguito da una barra.
Il %b//
nella domanda iniziale non ha alcun vantaggi rispetto /.-/
dal momento che i due delimitatori sono lo stesso carattere.
Modifica:. Aggiunto un modello suggerito da LHF, e più spiegazioni