2015-04-01 2 views
0

Пример строки: Before text, <ref>{{BLAHBLAHBLAHBLAH}}</ref> after text, <ref>{{reference2}}</ref> end of paragraph.Regex, чтобы удалить все между двумя строками, но с повторениями

Я ищу, чтобы удалить все упоминания о <ref> и </ref> и все между ними.

Результат, который я хочу от выше примере строки: Before text, after text, end of paragraph.

Я прочитал regex remove everything between 2 strings и попытались replaceAll("<ref>.*</ref>", ""), проблема у меня в том, что метод в этом потоке является удаление слишком много. Если я использую этот метод в приведенном выше тексте, результат будет: Before text, end of paragraph. Он вырезает текст между наборами <ref> тегов.

Есть ли способ регулярного выражения для достижения желаемого результата? В моем фактическом тексте может быть много (более 2) наборов <ref></ref> теги с полезным текстом между ними.

Редактировать: добавлено регулярное выражение, которое я пробовал.

+0

Не могли бы вы разместить регулярное выражение, которое используете? –

ответ

1

Если вы собираетесь ответ на который ссылается вопрос вы действительно «удаление слишком много», потому что ответ использует жадный оператор, используйте *? для non-greedy матча вместо ...

Я бы предложить следующее регулярное выражение, если вы должны использовать один на всех:

str = str.replaceAll("(?s)<ref>.*?</ref>", ""); 

Примечание: модификатор режим встроенного (?s) позволяет дот, чтобы соответствовать по новой строки последовательности.

3

Предполагаете, вы попробовали это с replaceAll("<ref>.*</ref>", "");. Попробуйте это с помощью вопросительного знака, это делает звезду не жадной. replaceAll("<ref>.*?</ref>", "");

Смежные вопросы