Текст соответствия регулярного выражения в скобках: [[text]] - PullRequest
0 голосов
/ 14 декабря 2011

Я пытаюсь написать регулярное выражение, которое будет работать в 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.

IЯ часами царапал мои головы, и самое близкое, что я придумал, это

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

Выше будет соответствовать

[[text is ] here]]

but not

[[text is [ here]]

Любая помощь / понимание будут оценены.

Ответы [ 3 ]

2 голосов
/ 14 декабря 2011
\[\[(?:[^\[\]]|\][^\]]|\[[^[])*\]\]

Expanded:

\[\[           # 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]].

0 голосов
/ 14 декабря 2011

Вам понадобится позитивный взгляд вперед и взгляд назад.

(?<=\[\[).*?(?=\]\])
0 голосов
/ 14 декабря 2011

Если я правильно понимаю ваш вопрос, вам нужно будет разбить его на два регулярных выражения: одно тестирование для части [[ ]], а другое - «плохое» условие около двух подряд.«Соответствие» соответствует первому, а не второму.

РЕДАКТИРОВАТЬ или используйте превосходное решение KennyTM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...