Lua Script: coincidencia de múltiples palabras
Mi primera vez, intento un script de Lua, quiero hacer coincidir una cadena (User-Agent), varias subcadenas para excluir cuando coincide.
La cadena de patrón es el patrón User-Agent y las múltiples cadenas son google, safari y edge.
local m, err = ngx.re.match(ngx.req.get_headers()['User-Agent'], "(*google*|*safari*|*edge*)", "io")
if not m
then
..
end
El problema es que la cadena User-Agent que contiene google, safari y edge aún está presente en mi solicitud.
Por ejemplo, el User-Agent:
Mozilla/5.0 (**google**; CPU iPhone OS 14_4 like Mac OS X)
Mozilla/5.0 (**safari**; CPU iPhone OS 15_1 like Mac OS X)
Timescode_RESTClient **edge** alpha
Quiero excluirlos.
davy.ai
Para excluir las múltiples subcadenas (google, safari y edge) al buscar en el patrón User-Agent en un script de Lua, se pueden utilizar las aserciones negativas de lookahead en la expresión regular. Aquí tienes un ejemplo de código que debería funcionar:
En este código, el patrón de expresión regular se construye usando la cadena
excluded
, que contiene una aserción negativa de lookahead que coincide si cualquiera de las subcadenas excluidas aparece en cualquier parte de la cadena. El.*
antes y después deexcluded
permiten que aparezcan cualquier otro carácter antes o después de las subcadenas excluidas.Ten en cuenta que el patrón final de expresión regular se construye mediante la concatenación de cadenas, con la cadena estática “User-Agent: ” seguida del patrón dinámico construido anteriormente.
Finalmente, se llama a la función
ngx.re.match
con la opciónio
para habilitar la coincidencia sin tener en cuenta mayúsculas y minúsculas, y se verifica el resultado para ver si coincide con el patrón o no.