2015-10-20 5 views
0

В настоящее время я использую dom4j для чтения шаблона регулярных выражений из xml, но функция совпадений всегда возвращает false, даже через строку возвращает точно такое же, что я набрал в xml.DOM4J Read Regex BUG

Выборка XML:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <username-pattern><![CDATA[^\\w+$]]></username-pattern> 
</root> 

Пример кода (не работает):

public class Test 
{ 
    public static void main(String[] args) throws DocumentException 
    { 
     File inputFile = new File("C://test/test.xml"); 
     SAXReader saxBuilder = new SAXReader(); 
     Document document = saxBuilder.read(inputFile); 
     Element rootElement = document.getRootElement(); 

     String username_pattern_notwork = rootElement.elementTextTrim("username-pattern"); 
     String username_pattern_work = "^\\w+$"; 
     if(!(Pattern.matches(username_pattern_notwork, "ooo"))){ 
      System.out.println("===============Err========="); 
     }else{ 
      System.out.println("OK"); 
     } 

    } 
} 

Если заменить переменную username_pattern_notwork с username_pattern_work в Pattern.matches (username_pattern_notwork, "ооо"), его будет работать как обычно

ответ

0

После прочтения исходного кода строка, считанная с xml на dom4j, уже сбежала.

Это означает, что мне не нужно избегать строки в XML-файле вручную. , т. Е.

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <username-pattern><![CDATA[^\w+$]]></username-pattern> 
</root> 
+1

Практически право, не совсем. Строка, считанная из внешнего источника, не нуждается в экранировании: нужно избегать только строковых литералов Java. –