成对括号的正则表达式

时间:2012-03-06 08:39:14

标签: regex regex-negation

输入线就像这样(只是它的一部分):

[[Text Text Text]][[text text text]]asdasdasdasda[[asdasdasdasd]]

我想要的是列出所有匹配,其中包含[[]]对的文字。 我确实尝试了几种模式,但是当未关闭的[[]]在输入行中时,所有模式都会失败。例如:

[[text[[text text TEXT text]]

此外,如果输入行中存在单个括号,例如:

[[text [text] text TEXT text]]

我使用的正则表达式是:

\[\[[^\[\[]*\]\]

2 个答案:

答案 0 :(得分:3)

\[\[(?:(?!\[\[|\]\]).)*\]\]

匹配[[<anything>]],其中<anything>可能不包含双括号,但包含其他所有内容。您可能需要设置正则表达式引擎的DOTALL选项以允许点匹配换行符。

它将匹配

中的[[match [this] text]]
[[don't match this [[match [this] text]] don't match this]]

<强>解释

\[\[     # Match [[
(?:      # Match...
 (?!     #  (unless we're right at the start of
  \[\[   #   [[
 |       #  or
  \]\]   #   ]]
 )       #  )
 .       # ...any character
)*       # Repeat any number of times
\]\]     # Match ]]

警告:它会匹配文字[[match [this]]中的[[match[this]]],因为正则表达式无法计算。

答案 1 :(得分:2)

如何处理未闭合或单支架符合您的规格。直到那时

\[\[([^\]]|\][^\]])*\]\]

适用于我(两个有问题的字符串都匹配。