可能在字符串中的字符的模式

时间:2014-04-09 12:56:07

标签: string lua lua-patterns

我知道我应该使用string.match()来执行此操作,但我无法匹配“#34; may"在字符串中,例如:

teststring = "right_RT_12" 

我可以轻松地做一些事情:

string.match(teststring , 'righteye_RT_[0-9]+')

如果测试字符串的末尾总是有#34; _ [0-9] +,那么这很好,但可能会有一个结尾没有数字的实例。我如何在Lua中迎合这一点?

在Python中我可以做类似的事情:

re.search("righteye_RT(_[0-9]+)?", teststring)

我认为这样的事情会起作用:

string.match(teststring, 'righteye_RT_?[0-9]+?')

但事实并非如此。结果= nil

但是,以下操作可行,但只能找到第一个数字:

string.match(teststring, 'righteye_RT_?[0-9]?')

2 个答案:

答案 0 :(得分:3)

?只能用于Lua模式中的一个字符。您可以使用or来匹配两种模式:

local result  = string.match(teststring , 'righteye_RT_%d+') 
             or string.match(teststring , 'righteye_RT')

请注意,or运算符是短路的。所以它首先尝试匹配第一个模式,当且仅当它失败(返回nil)时,它会尝试匹配第二个模式。

答案 1 :(得分:1)

试试这个:

string.match(teststring, 'righteye_RT_?%d*$')

注意字符串结尾锚$。没有它,%d*匹配空字符串,因此整个模式将匹配righteye_RT_junk之类的内容。