我有一个逗号分隔的字符串,我想匹配每个不在括号中的逗号(保证括号是平衡的)。
a , (b) , (d$_,c) , ((,),d,(,))
Run Code Online (Sandbox Code Playgroud)
a 和 (b)、(b) 和 (d$ ,c)、(d$ ,c) 和 ((,),d,(,))之间的逗号应该匹配但不在 (d$_,c) 内或 ((,),d,(,))。
注意:最终我想用这些逗号分割字符串。
它尝试了这个 regex:
(?!<(?:\(|\[)[^)\]]+),(?![^(\[]+(?:\)|\]))from here但它只适用于非嵌套括号。
您可以使用
(\((?:[^()]++|(?1))*\))(*SKIP)(*F)|,
Run Code Online (Sandbox Code Playgroud)
查看正则表达式演示
细节
(\((?:[^()]++|(?1))*\)) - 捕获组 1:匹配平衡括号之间的子字符串:
\(- 一个(字符(?:[^()]++|(?1))*- 除(和)或整个第 1 组模式之外的 1+ 个字符出现零次或多次(由于此处需要正则表达式子例程 (?1),因为仅递归整个正则表达式模式的一部分)\)- 一个)字符。(*SKIP)(*F) - 省略找到的匹配项并从匹配项的末尾开始下一次搜索| - 或者, - 匹配嵌套括号外的逗号。