在Lua中如何从字符串中提取符合特定格式的子串?
正确实现方案
完整可运行代码
local x = "define x = 2; output('Hello World')" -- 提取完整的output('xxx')结构 x:gsub("output%(%b'')", function(match_str) print(match_str) -- 输出:output('Hello World') end) -- 如果需要单独提取括号内的字符串内容,使用带捕获组的模式 x:gsub("output%(%('(.-)'%)", function(content) print(content) -- 输出:Hello World end)
用到的Lua模式匹配规则说明
- Lua模式中特殊符号需要用
%转义,(、)属于特殊字符,因此写作%(、%)匹配字面量括号 %bxy是平衡匹配语法,%b''表示匹配从单引号开始到对应结束单引号的所有内容,自动适配内部无嵌套引号的场景.-代表非贪婪匹配,会匹配尽可能短的符合规则的字符序列,避免匹配到字符串后续其他引号内容- 如果需要同时支持单引号、双引号包裹的参数,使用下面的通用模式:
x:gsub("output%(%(['\"])(.-)%1%)", function(quote, content) -- quote是匹配到的引号类型,content是括号内的文本 print(content) end)
内容的提问来源于stack exchange,提问作者Johan Grip
相关产品推荐
相关产品推荐

