如何用正则按双竖线||分割Lua字符串(含单竖线场景)
解决Lua中按双竖线||分割字符串的正则问题
你使用的([^||]+)模式之所以失效,是因为[^||]属于字符类定义,它只会排除单个竖线|,而非双竖线序列||,因此会误将字符串中的单竖线当作分隔符。
在Lua的模式匹配体系中(Lua模式是简化版正则,足以解决此问题),可以利用非贪婪匹配来精准捕获两个||之间的内容(包括单个竖线)。正确的匹配模式为(.-)(%|%||$),其中:
.-是非贪婪匹配任意字符,会在遇到第一个||或字符串结尾时停止(%|%||$)用于匹配分隔符||或者字符串结束位置
以下是具体实现代码:
local input_str = "value1=data1||value2=da|ta2||value3=test&user01|" local result = {} -- 遍历匹配结果,收集目标分段 for seg, _ in string.gmatch(input_str, "(.-)(%|%||$)") do table.insert(result, seg) end -- 打印验证结果 for _, v in ipairs(result) do print(v) end
运行后将输出预期结果:
value1=data1 value2=da|ta2 value3=test&user01|
内容的提问来源于stack exchange,提问作者Sumeet Kumar Yadav
相关产品推荐
相关产品推荐

