字符串匹配逻辑异常:两条START SUITE记录无法正确区分的问题
问题描述
有两条动态获取的记录需要通过字符串匹配区分:
Record1 : START SUITE: Android [ ]
Record2 : START SUITE: Android.Test the user dashboard [ ]
预期逻辑:
- 包含
Android [ ]的Record1,设置new_record["name"] = "A" - 包含
Android.的Record2,设置new_record["name"] = "B"
当前使用的Lua判断代码:
if record.message ~= nil and string.match(record.message, "START SUITE: Android[ ]") then new_record["name"] = "A" if string.match(record.message, "START SUITE: Android.") then getname(record.message) new_record["name"] = "B" end end
问题:Record1不符合第二个判断条件却进入了分支,被错误设置为name="B"。
解决方案
核心问题是Lua正则表达式中,.是通配符,会匹配任意单个字符(包括空格)。Record1里Android后的空格刚好被Android.中的.匹配,导致第二个条件误触发。
修正方案一:转义特殊字符,精确匹配
把正则中的.转义为%.(匹配字面量点号),同时转义[和]为%[、%],并调整判断顺序优先匹配更具体的Record2:
if record.message ~= nil then if string.match(record.message, "START SUITE: Android%.") then getname(record.message) new_record["name"] = "B" elseif string.match(record.message, "START SUITE: Android%[ %]") then new_record["name"] = "A" end end
修正方案二:默认值+覆盖逻辑
先设置默认值为"A",仅当匹配到点号时才改为"B",逻辑更简洁:
if record.message ~= nil then new_record["name"] = "A" if string.match(record.message, "START SUITE: Android%.") then getname(record.message) new_record["name"] = "B" end end
内容的提问来源于stack exchange,提问作者Zain
相关产品推荐
相关产品推荐

