Регулярное выражение для парных скобок - PullRequest
2 голосов
/ 06 марта 2012

Строка ввода выглядит следующим образом (только часть):

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

Я хочу перечислить все совпадения, в которых текст заключен в пару [[ и ]].Я попробовал несколько шаблонов, но все они терпят неудачу, когда незамкнутый [[ или ]] находится внутри строки ввода.Например:

[[text[[text text TEXT text]]

Кроме того, что если в строке ввода существует одна скобка, например:

[[text [text] text TEXT text]]

Я использовал шаблон регулярного выражения:

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

Ответы [ 2 ]

3 голосов
/ 06 марта 2012
\[\[(?:(?!\[\[|\]\]).)*\]\]

соответствует [[<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]]], потому что регулярные выражения не могут учитываться.

2 голосов
/ 06 марта 2012

Что делать с незакрытыми или одинарными скобками, зависит от вашей спецификации.До тех пор у меня работает

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

(где совпадают целые две проблемные строки.

...