我有一组存储在XML文件中的正则表达式,并且我有一个必须与这些正则表达式匹配的字符串。为了读取正则表达式,我使用XPath。
我的xml文件"ErrorPatterns.xml"看起来像这样:
<?xml version="1.0" encoding="windows-1252" ?>
<errors>
<pattern id="1">
<reg> ERROR:</reg>
</pattern>
<pattern id="2">
<reg> dog </reg>
</pattern>
</errors>
我的java代码如下:
String ab = "dog is barking";
File xmlFile = new File("ErrorPatterns.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(new FileInputStream("ErrorPatterns.xml"));
XPath xpath = XPathFactory.newInstance().newXPath();
String expression ="/errors/pattern/reg";
NodeList nodeList = (NodeList)xpath.compile(expression).evaluate(doc,XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
String paaatern=nodeList.item(i).getFirstChild().getNodeValue().toString();
Pattern pattern2 = Pattern.compile(paaatern);
Matcher m2 = pattern2.matcher(ab);
if(m2.find())
{
System.out.println("Yaay");
}
}
当运行上述代码时,它将退出而不打印"Yaay"。但是,如果不是从xml中读取表达式,并且像下面的代码中那样直接在Pattern中给出,它将打印"Yaay"
NodeList nodeList = (NodeList)xpath.compile(expression).evaluate(doc,XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
Pattern pattern2 = Pattern.compile("dog");
Matcher m2 = pattern2.matcher(ab);
if(m2.find())
{
System.out.println("Yaay");
}
}
但是,我从ErrorPatterns.xml中读取正则表达式并在项目中使用它们是不恰当的。请指导如何做。
感谢
您的问题是XML中有多余的空白。特别是,文件中包含的正则表达式是"ERROR:"one_answers"dog"(请注意空格),而不是您可能期望的"ERROR:"one_answers"dog"。
因此,dog正则表达式(匹配一个空格,后跟"dog",后跟一个空格)与测试字符串不匹配,因为它在单词"dog"之前不包含空格。
从XML文件中删除多余的空白,或者将测试字符串更改为以下内容(例如):
String ab = " dog is barking"; // Note the extra space at the front