Regex, чтобы получить смешанную ссылку со страницы wikimarkup в Java

Я должен проверить следующие строки:

has [[public transport]]ation in city? some[[times]]

и вернуть только соответствующие части - т.е.

[[public transport]]ationsome[[times]]

Я использую это регулярное выражение: \\w*?\\[\\[(.*?)\\]\\]\\w*?

Похоже, он не работает с приведенным выше примером и расширенными примерами, когда текст для поиска содержит новые строки и специальные символы. Можете ли вы указать, как я должен написать регулярное выражение?

2 ответа

Решение

По умолчанию . не будет соответствовать символам новой строки:

Вам нужно переключить однострочный режим

(?s)\\S*\\[\\[.*?\\]\\]\\S*
 ^

В однострочном режиме, . будет также соответствовать символам новой строки

Вы можете использовать это регулярное выражение с DOTALL переключатель (?s):

(?s)\\S*\\[\\[.*?\\]\\]\\S*

System.out.println("has [[public transport]]ation in city? some[[times]]".replaceAll(
    "(?s)\\S*\\[\\[.*?\\]\\]\\S*", "<$0>"));

ВЫХОД:

has <[[public transport]]ation> in city? <some[[times]]>
Другие вопросы по тегам