不幸的是, Lua 模式不是正则表达式,功能也较弱。特别是它们不支持交替(Java 或 Perl 正则表达式的竖线|
运算符),这是您想要做的。
一个简单的解决方法可能如下:
local function MatchAny( str, pattern_list )
for _, pattern in ipairs( pattern_list ) do
local w = string.match( str, pattern )
if w then return w end
end
end
s = "hello dolly!"
print( MatchAny( s, { "hello", "world", "%d+" } ) )
s = "cruel world!"
print( MatchAny( s, { "hello", "world", "%d+" } ) )
s = "hello world!"
print( MatchAny( s, { "hello", "world", "%d+" } ) )
s = "got 1000 bucks"
print( MatchAny( s, { "hello", "world", "%d+" } ) )
输出:
你好
世界
你好
1000
该函数MatchAny
会将其第一个参数(字符串)与 Lua 模式列表进行匹配,并返回第一个成功匹配的结果。