我有一个复杂的字符串,其中包含未知数量的字母,数字和字符。例如
"a83bal*av31-ab+asf3/af1124-xxx.afe-100/araw31/31*xxx.g41.abt.eta+131as*dfa"
目标是找到字符串xxx并提取其后的所有内容,直到+
,-
,*
,/
。因此,我应该能够提取xxx.afe
和xxx.g41.abt.eta
查找字符串很简单string:find("xxx")
我遇到的麻烦是收集"xxx"
之后的所有信息,直到其中一个运营商。我尝试过像
string:match("xxx.(.+[%+%-%*%/])")
以及上述的几种变体,但我有些遗漏。
答案 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环境中存储一般字符串数据类型的元表。请避免使用类似的变量名称。