【问题标题】:DOM4J Read Regex BUGDOM4J 读取正则表达式 BUG
【发布时间】:2015-10-20 02:37:45
【问题描述】:

我目前正在使用 dom4j 从 xml 读取正则表达式模式,但即使字符串返回与我在 xml 中键入的内容完全相同,matches 函数也总是返回 false。

示例 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");
        }

    }
}

如果在 Pattern.matches(username_pattern_notwork, "ooo") 中将变量 username_pattern_notwork 替换为 username_pattern_work ,它将正常工作

【问题讨论】:

    标签: java regex xml dom4j


    【解决方案1】:

    通读源码后, dom4j从xml读取的字符串已经被转义了。

    这意味着我不需要手动转义 xml 文件中的字符串。 即

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

    【讨论】:

    • 差不多,但不完全正确。从外部源读取的字符串不需要转义:只有 Java 字符串文字需要转义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 2017-05-17
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    相关资源
    最近更新 更多