模式匹配时如何忽略嵌套括号?

时间:2014-03-03 22:15:58

标签: java regex pattern-matching

在匹配模式时忽略嵌套括号时遇到问题。该文件的某些行具有嵌套括号,但其他行不具有嵌套括号。我想匹配的模式是(a)_b,但是a中有括号。这是我现在的模式:

(\\(([^)]+)\\)_\\{([^}]+)\\})

我知道如果你可以检查匹配器组是否包含括号,你可以忽略它们。但是我认为匹配器组没有包含方法。谢谢。

2 个答案:

答案 0 :(得分:2)

您无法使用正则表达式执行此操作。跳过嵌套结构需要计算能力;正则表达式无法计算。

您需要构建跟踪嵌套的内容。正则表达式没有非常复杂的语法;编写一个简单的解析器来跳过它们很容易,计算嵌套的括号。

答案 1 :(得分:0)

NOT 匹配包含嵌套的括号嵌套卷曲,请执行以下操作

 #  "(\\(([^()]+)\\)_\\{([^{}]+)\\})"

 (
      \(
      ( [^()]+ )
      \)
      _
      \{
      ( [^{}]+ )
      \}
 )

要在两个地方排除这两个,

 #  "(\\(([^(){}]+)\\)_\\{([^(){}]+)\\})"

 (
      \(
      ( [^(){}]+ )
      \)
      _
      \{
      ( [^(){}]+ )
      \}
 )