使用这个:
((.*?)|||<.>)并将它与替换全部$ 2组合将适用于您的示例。下面的代码证明了这一点:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static org.junit.Assert.*;
import org.junit.Test;
public class TestStack1305864 {
@Test
public void matcherWithCdataAndComments(){
String s="The quick brown fox jumped over the lazy ]]> dog .";
String r="The quick brown fox jumped over the lazy dog .";
String pattern="((.*?)|||<.>)";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(s);
String t = s.replaceAll(pattern, "$2");
System.out.println(t);
System.out.println(r);
assertEquals(r, t);
}
}我们的想法是捕获您有兴趣保留在特定组中的所有元素,以便将它们插回到字符串中
这样你可以替换所有:
对于与有趣的元素不匹配的每个元素,该组将为空,元素将替换为“”
对于有趣的元素,该组不会为空,并将附加到结果String。
编辑:句柄嵌套在CDATA和评论中
编辑:请参阅http://martinfowler.com/bliki/ComposedRegex.html以获取正则表达式组合模式,旨在使正则表达式更易于维护。