regex - perl正则表达式获取不在括号或嵌套括号中的逗号

标签 regex perl pcre

我有一个逗号分隔的字符串,我想匹配每个不在括号中的逗号(保证括号是平衡的)。

a   ,   (b)  ,   (d$_,c)    ,     ((,),d,(,))

a和(b)、(b)和(d$,c)、(d$,c)和((,),d,(,))之间的逗号应该匹配但不在 (d$_,c) 或 ((,),d,(,) 内。

注意:最终我想用这些逗号分割字符串。

它尝试了这个正则表达式: (?!<(?:\(|\[)[^)\]]+),(?![^(\[]+(?:\)|\]))来自 here但它仅适用于非嵌套括号。

最佳答案

你可以使用

(\((?:[^()]++|(?1))*\))(*SKIP)(*F)|,

参见 regex demo

详情

  • (\((?:[^()]++|(?1))*\)) - 捕获组 1:匹配平衡括号之间的子字符串:
    • \( - 一个 ( 字符
    • (?:[^()]++|(?1))* - 除 ( 之外的 1+ 个字符出现零次或多次) 或整个第 1 组模式(由于 regex subroutine (?1) 在这里是必需的,因为整个正则表达式模式中只有一部分被递归)
    • \) - ) 字符。
  • (*SKIP)(*F) - 省略找到的匹配项并从匹配项末尾开始下一次搜索
  • | - 或者
  • , - 匹配嵌套括号外的逗号。

关于regex - perl正则表达式获取不在括号或嵌套括号中的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59671144/

相关文章:

regex - MariaDB 中的正则表达式替换

objective-c - 正则表达式仅在特定字符串之后匹配

perl - OO-Perl 别名类属性

perl - Mechanize 以跟随元刷新链接

regex - .htaccess 中的正则表达式不匹配空格字符

c# - 修剪最后一次正则表达式匹配之前的所有文本

c# - 何时不在 C#(或 Java、C++ 等)中使用 Regex

linux - 我应该如何找到几个可能字符的索引?

regex - 将字符串截断至 PCRE 中的大小

javascript - [][] 如何在正则表达式中解析?