Pregunta

Tengo una cadena como hello /world today/

Tengo que sustituir /world today/ con /MY NEW STRING/

Leer el manual he encontrado

newString = string.match("hello /world today/","%b//")

que puedo usar con gsub para reemplazar, pero me preguntaba es también una manera elegante de devolver sólo el texto entre el /, sé que sólo pudiera recortar, pero me preguntó si había un patrón.

¿Fue útil?

Solución

Trate algo así como uno de los siguientes:

  • slashed_text = string.match("hello /world today/", "/([^/]*)/")
  • slashed_text = string.match("hello /world today/", "/(.-)/")
  • slashed_text = string.match("hello /world today/", "/(.*)/")

Esto funciona porque string.match devuelve cualquier captura a partir del patrón, o todo el texto coincidente si no hay capturas. La clave es, entonces, para asegurarse de que el patrón tiene la cantidad correcta de la avidez, recordando que los patrones de Lua no son un completo lenguaje de expresiones regulares.

Los dos primeros debe coincidir con los mismos textos. En la primera, he exijan de forma expresa que la coincidencia de patrón como muchos que no son barras como sea posible. El segundo (LHF gracias) coincide con el plazo más breve posible ningún carácter en absoluto seguido de una barra. La tercera es más codicioso, que coincide con el tramo más largo de caracteres que todavía puede ser seguido por una barra.

El %b// en la pregunta original no tiene ninguna ventaja sobre /.-/ ya que los dos delimitadores son el mismo personaje.

Editar:. Se ha añadido un patrón sugerido por la ICI, y más explicaciones

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top