创建一个正则表达式,以跳过大括号和方括号内的逗号

时间:2019-07-25 15:49:47

标签: php regex

我有以下正则表达式:

,|\{[^]]+\}(*SKIP)(*FAIL)

忽略大括号内的逗号。因此,以下逗号将被忽略:

  

{hi,there}

但是,我还需要它同时忽略大括号中的逗号和嵌套在大括号中的方括号中的逗号。因此,以下的逗号应被忽略:

  

{“星星”:[6,5]}

任何人都可以建议RegEx。谢谢

1 个答案:

答案 0 :(得分:1)

您可能要做的是匹配开头{,然后不匹配此字符类[^{}\r\n\]\[]中列出的所有字符,或者遇到开头[匹配时直到匹配。关闭一个。

如果已在字符类中添加了换行符以防止演示中的行交叉,并且为了清楚起见对所有[]进行了转义。

,|{(?:[^{}\r\n\]\[]|\[[^\r\n\]]*\])*}(*SKIP)(*FAIL)
  • ,匹配逗号
  • |
  • {比赛开始{
  • (?:非捕获组
  • )*关闭非捕获组并重复0次以上
  • }比赛结束}
  • (*SKIP)(*FAIL)

Regex demo

另一种选择是将{}之间的所有内容匹配

,|\{[^{}\r\n]*\}(*SKIP)(*FAIL)

Regex demo