如何在lua中验证模式

如何在lua中验证模式,lua,pattern-matching,validation,Lua,Pattern Matching,Validation,我目前正在lua中创建一个搜索函数,它基本上只是遍历一个项目列表,并以特定的方式处理与输入字符串匹配的项目。 我使用string.findsourceString、inputString来标识项目 每当用户在文本字段中键入某个内容时,就会调用该函数。因此,如果用户试图输入模式,则在使用集合或捕获时,当搜索字符串仅包含[或]而不包含关闭等效项时,就会调用该函数,这会引发错误 我认为解决这个问题的最佳方法是验证输入是否是有效的模式,但我不知道如何做。Lua本身似乎没有包含用于此的方法,我自己也有点困

我目前正在lua中创建一个搜索函数,它基本上只是遍历一个项目列表,并以特定的方式处理与输入字符串匹配的项目。 我使用string.findsourceString、inputString来标识项目

每当用户在文本字段中键入某个内容时,就会调用该函数。因此,如果用户试图输入模式,则在使用集合或捕获时,当搜索字符串仅包含[或]而不包含关闭等效项时,就会调用该函数,这会引发错误


我认为解决这个问题的最佳方法是验证输入是否是有效的模式,但我不知道如何做。Lua本身似乎没有包含用于此的方法,我自己也有点困惑如何或多或少地检查它。提前感谢您的帮助和想法:

请参阅模式转义我认为是从wiki的某个地方获取的函数。如果需要,可以将其转换为验证函数。

我认为,有关从wiki的某个地方获取的模式转义函数,请参阅。如果需要,可以将其转换为验证函数。

您应该使用pcall包装对string.find的调用以捕获错误

local status, result = pcall(string.find, sourceString, inputString)
if not status then
    -- bad pattern logic, error message is in result
else
    -- good pattern logic, result contains the start index
end

您应该使用pcall包装对string.find的调用以捕获错误

local status, result = pcall(string.find, sourceString, inputString)
if not status then
    -- bad pattern logic, error message is in result
else
    -- good pattern logic, result contains the start index
end

s1=string.gsubs1,%W,%%%1 from似乎更简洁。但是,如果这就是所需要的,那么为什么不使用string.find的普通参数呢?我认为问题是如何处理错误的模式,而不是如何转义字符串。@gwell:如果OP想允许任何特殊字符,这个问题还不清楚。@gwell:concise:是的,但它会导致更长的字符串,因此不一定更好。实际上,我通常希望允许模式匹配。要禁用这些,我还可以将find的可选第三个参数设置为true,以便将输入序列视为纯文本。但这可能会为验证函数提供一个起点s、 我可能能够计算出副命题并寻找匹配的计数。如果另一个解决方案似乎更容易实现,我会尝试一下:谢谢!s1=string.gsubs1,%W,%%%1 from似乎更简洁。但是,如果这就是所需要的,那么为什么不使用普通参数string.find。我认为问题在于如何处理错误的模式,而不是如何转义字符串。@gwell:如果OP希望允许特殊字符,问题还不清楚。@gwell:简明:是的,但它可能导致字符串更长,因此不一定更好。实际上,我通常希望允许模式匹配。要禁用这些,我还可以设置可选的第三个pa参数find to true,因此输入序列将被视为纯文本。但这可能会给我一个验证函数的起点。我可能能够计算paradensis并寻找匹配的计数。如果其他解决方案似乎更容易实现,我将尝试一下:谢谢!如果您希望特殊字符是active在模式中,那么是的,这可能是最简单的方法。看起来不错,我看到的唯一问题是,当我实际尝试应用模式时,我会进行有效性检查。我认为从编码角度来看,在第一次应用之前验证字符串会很好。不过,我认为我会完全这样做。Thanks!:如果您希望特殊字符在模式中处于活动状态,那么是的,这可能是最简单的方法。看起来不错,我看到的唯一问题是,当我实际尝试应用该模式时,我会进行有效性检查。我想从编码角度来看,在第一次应用之前验证字符串会很好。Ne我想我会做到的,谢谢