Используя следующую тестовую строку (обратите внимание, я добавил туда еще [[image:foobar[[foo [baz] bar]]foobar]]
):
[[Image:ChicagoAnarchists.jpg|thumb|A sympathetic engraving by [[Walter Crane]] of the executed \"Anarchists of Chicago\" after the [[Haymarket affair]]. The Haymarket affair is generally considered the most significant event for the origin of international [[May Day]] observances]] In 1907, the [[International Anarchist Congress of[[image:foobar[[foo [baz] bar]]foobar]] Amsterdam]] gathered delegates from 14 different countries, among which important figures of the anarchist movement, including [[Errico Malatesta]]
И шаблон регулярного выражения:
(?i)\\[\\[image:(?:\\[\\[(?:(?!(?:\\[\\[|]])).)*]]|(?:(?!(?:\\[\\[|]])).)*?)*?]]
testString.replaceAll(<above pattern>, "")
вернет:
In 1907, the [[International Anarchist Congress of Amsterdam]] gathered delegates from 14 different countries, among which important figures of the anarchist movement, including [[Errico Malatesta]]
Вот более подробное объяснение регулярного выражения:
(?i) # Case insensitive flag
\[\[image: # Match literal characters '[[image:'
(?: # Begin non-capturing group
\[\[ # Match literal characters '[['
(?: # Begin non-capturing group
(?! # Begin non-capturing negative look-ahead group
(?: # Begin non-capturing group
\[\[ # Match literal characters '[['
| # Match previous atom or next atom
]] # Match literal characters ']]'
) # End non-capturing group
) # End non-capturing negative look-ahead group
. # Match any character
) # End non-capturing group
* # Match previous atom zero or more times
]] # Match literal characters ']]'
| # Match previous atom or next atom
(?: # Begin non-capturing group
(?! # Begin non-capturing negative look-ahead group
(?: # Begin non-capturing group
\[\[ # Match literal characters '[['
| # Match previous atom or next atom
]] # Match literal characters ']]'
) # End non-capturing group
) # End non-capturing negative look-ahead group
. # Match any character
) # End non-capturing group
*? # Reluctantly match previous atom zero or more times
) # End non-capturing group
*? # Reluctantly match previous atom zero or more times
]] # Match literal characters ']]'
Это будет обрабатывать только один уровень вложенных шаблонов [[...]]
.Как отмечалось в этом ответе на этом вопросе , который TJR прокомментировал выше, регулярные выражения не будут обрабатывать неограниченные вложенные атомы.Таким образом, этот шаблон регулярного выражения не будет совпадать с чем-то вроде [[foo[[baz]]bar]]
в строке [[image:...]]
.
Для получения справки о регулярных выражениях см. Regular-Expressions.info .