regex lua lua-patterns

regex - Paréntesis del patrón Lua y 0 o 1 ocurrencia



lua string gsub (2)

Intento hacer coincidir una cuerda con un patrón, pero hay una cosa que no he podido descifrar. En una expresión regular haría esto:

Strings: en eng engl engli englis english Pattern: ^en(g(l(i(s(h?)?)?)?)?)?$

Quiero que todas las cadenas sean un partido. En la coincidencia de patrones Lua no puedo hacer que esto funcione.

Incluso un ejemplo más simple como este no funcionará:

Strings: fly flying Pattern: ^fly(ing)?$

¿Alguien sabe cómo hacer esto?


¿No puedes hacer que los grupos de partidos sean opcionales (o repetirlos) usando los cuantificadores de Lua ? , * , + y - .

En el patrón (%d+)? , el signo de interrogación "pierde" su significado especial y simplemente coincidirá con el literal ? como puede ver al ejecutar las siguientes líneas de código:

text = "a?" first_match = text:match("((%w+)?)") print(first_match)

que se imprimirá:

a?

AFAIK, lo más cercano que puedes venir en Lua sería usar el patrón:

^eng?l?i?s?h?$

que (por supuesto) coincide con una cadena como "enh" , "enls" , ... también.


En Lua, los paréntesis solo se usan para capturar. Ellos no crean átomos.

Lo más cerca que puede llegar a los patrones que desea es:

''^flyi?n?g?$'' ''^en?g?l?i?s?h?$''

Si necesita la potencia máxima de un motor de expresión regular, hay enlaces a motores comunes disponibles para Lua. También hay LPeg, una biblioteca para crear PEG , que viene con un motor de expresión regular como ejemplo (no estoy seguro de lo poderoso que es).