我正在尝试使用 Java 中的模式和匹配器搜索字符串中的元素。
我有一个节点变体项目,需要获取这些节点之间的所有字符。 我尝试了下面的正则表达式,但它完全跳过了这一行。 但是,如果我在 Notepad++ 中使用相同的正则表达式进行搜索,我会选择所需的结果。请指教。
<variant-items>((.|\n)*)</variant-items>
下面是我的实现
String patternSourceComponent = "<variant-items>((.|\n)*)</variant-items>";
String result=this.isMatched(patternSourceComponent, xml);
public String isMatched(String patternSourceComponent,String xml)
{
String varientItem="";
try{ Pattern patternComponent = Pattern.compile(patternSourceComponent);
Matcher matcherComponent = patternComponent.matcher(xml);
System.out.println("matcherComponent Find : "+matcherComponent.find());
while (matcherComponent.find()) {
varientItem=matcherComponent.group(0).trim();
System.out.println("varientItem : "+varientItem);
} }
catch (Exception e)
{
System.out.println("Exception : "+e);
}
return varientItem;
}
最佳答案
我个人会使用Java DOM检查您的节点。对 XML 使用正则表达式是一场噩梦,任何尝试使用它的代码将来很可能会崩溃。尝试这样的方法来获取“variant-items”节点的字符串内容。
File xmlFile = new File("your_xml.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
NodeList nList = doc.getElementsByTagName("variant-items");
for (int i = 0; i < nList.getLength(); i++) {
Node node = nList.item(i);
System.out.println(node.getNodeValue());
}
上面的代码打印 xml 文件中所有“variant-items”节点的值。
如果资源/速度考虑是一个问题(例如当 your_xml.xml 很大时),您最好使用 SAX ,速度更快(代码密集一些)并且不会将 XML 存储在内存中。
关于java - 使用 Java 中的模式和匹配器搜索字符串中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21834286/