使用复杂模式进行字符串解析

时间:2015-10-21 04:01:15

标签: string lua lua-patterns

我有一个复杂的字符串,其中包含未知数量的字母,数字和字符。例如

"a83bal*av31-ab+asf3/af1124-xxx.afe-100/araw31/31*xxx.g41.abt.eta+131as*dfa"

目标是找到字符串xxx并提取其后的所有内容,直到+-*/。因此,我应该能够提取xxx.afexxx.g41.abt.eta查找字符串很简单string:find("xxx")我遇到的麻烦是收集"xxx"之后的所有信息,直到其中一个运营商。我尝试过像

这样的事情
string:match("xxx.(.+[%+%-%*%/])")

以及上述的几种变体,但我有些遗漏。

2 个答案:

答案 0 :(得分:1)

str = "a83bal*av31-ab+asf3/af1124-xxx.afe-100/araw31/31*xxx.g41.abt.eta+131as*dfa"    
for m in str:gmatch("[+%-*/](xxx.-)[+%-*/]") do
    print(m)
end

请注意,-甚至在char-set中也有特殊含义(例如[1-9a-f]),所以它必须被转义,或者放在char-set的开头或结尾,即[-+*/]

答案 1 :(得分:1)

您可以使用否定字符类来匹配([^-+*/]):

for sWord in str:gmatch "xxx%.([^-+*/]+)" do
    -- do things to sWord
end

请注意,查看您的代码段;你正在使用名为string的变量。 string在lua环境中存储一般字符串数据类型的元表。请避免使用类似的变量名称。