我需要解析可能在组内具有内部组的逗号分隔组(括在括号中)。它应该只分隔外部组。
我有一个功能可以做到这一点:
function lpeg.commaSplit(arg)
local P,C,V,sep = lpeg.P, lpeg.C, lpeg.V, lpeg.P(",")
local p = P{
"S";
S = lpeg.T_WSpace * C(V"Element") * (lpeg.T_WSpace * sep * lpeg.T_WSpace * C(V"Element"))^0 * lpeg.T_WSpace,
Element = (V"Group")^0 * (1 - lpeg.T_Group - sep)^0 * (V"Group" * (1 - lpeg.T_Group - sep)^0)^0 * (1 - sep)^0,
Group = lpeg.T_LGroup * ((1 - lpeg.T_Group) + V"Group")^0 * lpeg.T_RGroup
}^-1
return lpeg.match(lpeg.Ct(p), arg)
end
但问题是删除可能包含该组的额外括号。
这是一个测试字符串:
[[a,b,[c,d]],[e,[f,g]]]
应该解析为
[a,b,[c,d] & [e,[f,g]]
请注意,内部组是单独的。简单地删除末尾多余的括号是行不通的,因为你最终会得到一个像a,b,[c,d]],[e,[f,g]
.
任何想法如何修改 lpeg 语法以允许外部组?