Lua string.match使用不规则的正则表达式?

Uro*_*nym 7 regex lua

我很好奇为什么这不起作用,需要知道为什么/如何解决它; 我试图检测一些输入是否是一个问题,我很确定string.match是我需要的,但是:

print(string.match("how much wood?", "(how|who|what|where|why|when).*\\?"))

返回零.我很确定Lua的string.match使用正则表达式来查找字符串中的匹配项,因为我在成功之前使用了通配符(.),但也许我不了解所有的机制?Lua在字符串函数中是否需要特殊的分隔符?我在这里测试了我的正则表达式,所以如果Lua使用常规正则表达式,似乎上面的代码会返回"how much wood?".

你能不能告诉我我做错了什么,我的意思是什么,或者指出一个很好的参考,我可以获得有关Lua的字符串操作函数如何利用正则表达式的全面信息?

kap*_*pex 13

Lua不使用正则表达式.Lua使用的模式看似相似,但匹配不同的输入.

.*也会消耗最后一个?输入,因此它会失败\\?.问号应排除在外.特殊字符被转义%.

"how[^?]*%?"
Run Code Online (Sandbox Code Playgroud)

正如Omri Barel所说,没有替代运营商.您可能需要使用多个模式,一个用于句子开头的每个替代单词.或者您可以使用支持正则表达式的库.


Omr*_*rel 9

根据手册,模式不支持交替.

所以虽然"how.*"有效,但"(how|what).*"不是.

而kapep对于被问题吞噬的问号是正确的.*.

有一个相关的问题:Lua模式匹配与正则表达式.