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

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

"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.(.+[%+%-%*%/])")

以及上述的几种变化,但还有一些问题我没有解决。

点赞
用户1009479
用户1009479
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

请注意,即使在字符集内(如 [1-9a-f]),- 也有特殊含义,因此必须进行转义,或将其放置在字符集的开头或结尾,即 [-+*/]

2015-10-21 04:10:44
用户1190388
用户1190388

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

for sWord in str:gmatch "xxx%.([^-+*/]+)" do
    -- 对sWord进行操作
end

请注意,查看你的代码片段; 你正在使用名为string的变量。string存储了lua环境中通用字符串数据类型的元表。请避免使用这样的变量名。

2015-10-21 05:34:54