使用正则表达式提取内部组

Extracting inner groups with regex

我有以下字符串

([Valor][Corr][Fat]: 6M UC x Viz. Lógicos IN('3','6')) AND (((SUM_RevisionAnomalia_UltRevision_1M = 1) AND (CANT_ConsumoFact_UltRevision_1M > 1))   OR ((SUM_RevisionNoAnomalia_UltRevision_1M + 1) AND (CANT_ConsumoFact_UltRevision_1M BETWEEN 1 - 2))) OR (SUM_RevisionNoAnomalia_UltRevision_1M <= 1)

并且我正在尝试提取所有内部组,所以我的答案应该包含

([Valor][Corr][Fat]: 6M UC x Viz. Lógicos IN('3','6'))
(SUM_RevisionAnomalia_UltRevision_1M = 1)
(CANT_ConsumoFact_UltRevision_1M > 1)
(SUM_RevisionNoAnomalia_UltRevision_1M + 1)
(CANT_ConsumoFact_UltRevision_1M BETWEEN 1 - 2)
(SUM_RevisionNoAnomalia_UltRevision_1M <= 1)

当括号内只有一组字符串时,提取它非常容易,但是当给出上面的示例时,我的正则表达式捕获了整个字符串。 我使用的正则表达式是

/(\([a-zA-Z0-9\[\]:_+=-\s\.\(\),'óáéíúüçãôàäê><]+\))/g

您似乎只想匹配 () 之间的内容,而不是 () 除非它们是 (...)以单词字符开头。

你可以使用

\((?:[^()]|\b\([^()]*\))*\)

regex demo

正则表达式分解:

  • \( - 匹配文字 (
  • (?:[^()]|\b\([^()]*\))* - 零个或多个序列:
    • [^()] - ()
    • 以外的任何字符
    • | - 或者...
    • \b\([^()]*\) - 单词边界(即在该位置之前,必须有一个单词字符)后跟 ( 后跟 ( 和 [= 以外的零个或多个字符13=]
  • \) - 收盘 )

另一种模式可以是展开的模式(输入越长效率越高):

\([^()]*(?:\b\([^()]*\)[^()]*)*\)

another demo