正则表达式匹配括号内的文本:[[text]]

时间:2011-12-14 01:38:33

标签: c# .net regex expression

我正在尝试编写一个可以在c#中使用的正则表达式,它可以匹配

行中的内容
[[text is here]]

几乎所有内容都可以介于[[]]之间。

唯一的规则是,如果显示[], 不可能连续超过1个。

例如

[[ text ] is here ]] is a match
[[ text [ is ]here [ ]] is a match
[[ text ][ is [] ]] is a match

[[ text [[ is here]] is NOT a match.

我几个小时都在摸不着头脑,而我最接近的是

@"\[\[[^\[]+(\]\])+?"

以上将匹配

[[text is ] here]]

but not

[[text is [ here]]

任何帮助/见解将不胜感激。

3 个答案:

答案 0 :(得分:2)

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

展开:

\[\[           # match the [[
(?:            # and then match zero or more...
   [^\[\]]     #   character which is not [ or ], or
|  \][^\]]     #   a ], followed by a non-], or
|  \[[^[]      #   a [, followed by a non-[
)*
\]\]           # and match the ]]

请注意,这会将[[ text [[ is here]] is NOT a match.[[ is here]]匹配。

答案 1 :(得分:0)

如果我正确理解你的问题,你需要将它分解为两个正则表达式,一个测试[[ ]]部分,另一个寻找连续两个的“坏”条件。 “匹配”匹配第一个而不是第二个。

编辑或使用KennyTM的卓越解决方案

答案 2 :(得分:0)

你需要积极向前看并向后看。

(?<=\[\[).*?(?=\]\])