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.

È stato utile?

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

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