我正在尝试编写一个可以在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]]
任何帮助/见解将不胜感激。
答案 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)
你需要积极向前看并向后看。
(?<=\[\[).*?(?=\]\])