已经有一段时间了,无法理解这一点。我有这段代码:
getStringFromDom(doc).replaceAll("contract=\"\\d*\"|name=\"\\p{L}*\"", "");
基本上我需要它以相反的方式工作 - 替换所有但是指定的正则表达式。我一直试图用负面预测来做到这一点无济于事。
答案 0 :(得分:2)
对于您的特定任务,我认为
getStringFromDom(doc).replaceAll(".*?(contract=\"\\d*\"|name=\"\\p{L}*\").*", "$1");
应该做你需要的。
答案 1 :(得分:1)
您想要删除与模式不匹配的所有内容。这与简单地过滤模式匹配相同。使用正则表达式查找该模式的匹配项,然后在stringbuilder中收集匹配项。
Matcher m = Pattern.compile(your pattern).matcher(your input);
StringBuilder sb = new StringBuilder();
while (m.find()) sb.append (m.group()).append('\n');
String result = sb.toString();
答案 2 :(得分:1)
我也认为删除你不想要的是双重否定。专注于你正在寻找的东西,并使用模式匹配。此示例在您的文档中搜索任何名称属性:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String input = "<AnotherDoc accNum=\"1111\" docDate=\"2017-09-26\" docNum=\"2222\" name=\"foo\"> <anotherTag>some date</anotherTag>";
Pattern pattern = Pattern.compile("name=\"[^\\\"]*\""); // value are all characters but "
Matcher matcher = pattern.matcher(input);
while (matcher.find())
System.out.println(matcher.group());
}
}
打印:
name="foo"