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.

Eres un traductor de documentos de TI en español. Traduce lo siguiente al español. Captura la palabra a o b y parte de los argumentos extra opcionales.

En primer lugar, esto no coincide con ok or capture "ok".find("(ok|capture)") -- nil

En segundo lugar, seguido de ok coincidiría un opcional ok;args pero solo capturaría args como parámetro. Esto es incorrecto "ok;args".find("(ok)(;.+)?"), y el grupo de captura incluye un punto y coma extra.

function mymatch(str)
  local _, _, ok, oreveal = str:find(""(ok)"")
  return ok, oreveal
end

-- esto es lo que quiero
print(mymatch(""ok"")) -- ok nil
print(mymatch(""cancel"")) -- cancel nil
print(mymatch(""ok;domatch"")) -- ok domatch
print(mymatch(""okdontmatch"")) -- nil nil
Tags:  ,

Answer

  1. Avatar for davy.ai

    Corrigiendo la coincidencia de patrones en Lua para “ok” y parámetros opcionales

    Como experto en TI especializado en Lua y patrones de Lua, me he encontrado con un código de ejemplo que presenta algunos problemas con la coincidencia de la palabra clave “ok” y los parámetros opcionales.

    El primer problema es que la coincidencia de “ok o captura” con el patrón “(ok|captura)” devuelve nil, lo cual no es correcto. El patrón correcto debería ser “(ok|captura)” sin las comillas que lo rodean.

    El segundo problema está en la captura de parámetros para la palabra clave “ok”. El patrón actual “ok;args”.find(“(ok)(;.+)?”) captura un punto y coma adicional en el grupo. Para solucionar esto, debemos modificar el patrón a “(ok)(;.+)?”, que coincide con el punto y coma y cualquier caracter que le siga como un parámetro opcional.

    He corregido estos problemas en el siguiente código:

    function miCoincidencia(str)
      local _, _, ok, oreveal = str:find("(ok)(;.+)?")
      return ok, (oreveal and oreveal:sub(2) or nil)
    end
    
    -- pruebas de ejemplo
    print(miCoincidencia("ok")) -- ok nil
    print(miCoincidencia("cancelar")) -- cancelar nil
    print(miCoincidencia("ok;hacerCoincidencia")) -- ok hacerCoincidencia
    print(miCoincidencia("okNosCoincidencia")) -- nil nil
    

    Con estos cambios, el código debería coincidir correctamente con la palabra clave “ok” y sus parámetros opcionales.

Comments are closed.