es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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:

    local user_agent = ngx.req.get_headers()['User-Agent']
    local excluded = "(?=.*(google|safari|edge))"
    local pattern = "User%-Agent: .*" .. excluded .. ".*"
    
    local match, err = ngx.re.match(user_agent, pattern, "io")
    if match then
      -- hacer algo si el patrón coincide
    else
      -- hacer algo si el patrón no coincide
    end
    

    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 de excluded 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ón io 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.

Comments are closed.