正则表达式删除两个字符串之间的所有内容,但重复

时间:2015-04-01 00:21:41

标签: java regex

示例字符串:Before text, <ref>{{BLAHBLAHBLAHBLAH}}</ref> after text, <ref>{{reference2}}</ref> end of paragraph.

我希望删除对<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>个标记,其中包含有用的文本。

编辑:添加了我试过的正则表达式。

2 个答案:

答案 0 :(得分:3)

我假设您使用replaceAll("<ref>.*</ref>", "");进行了尝试。尝试使用问号,这使得明星不贪心。 replaceAll("<ref>.*?</ref>", "");

答案 1 :(得分:1)

如果您在引用的问题中找不到答案,那么您确实“删除了太多”,因为答案使用贪婪的运算符,请使用*?进行non-greedy匹配...

如果你必须使用一个正则表达式,我会提出以下正则表达式:

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

注意:内联(?s)模式修饰符允许点在换行符序列中匹配。