首页 > 解决方案 > 正则表达式在多行字符串中查找 XML 标记

问题描述

这是我编写的一个简单函数,用于从标签中获取值。

public static String getTagAValue(String xmlAsString) {
    Pattern pattern = Pattern.compile("<TagA>(.+)</TagA>");
    Matcher matcher = pattern.matcher(xmlAsString);
    if (matcher.find()) {
        return matcher.group(1);
    } else {
        return null;
    }
}

它没有找到匹配项并返回 null。

XML 示例

<xml>
    <sample>
        <TagA>result</TagA>
    </sample>
</xml>

请注意,这里我使用了 4 个空格作为制表符,但真正的字符串将包含制表符。

标签: javaxml

解决方案


不要使用正则表达式来解析 XML:它是不适合这项工作的工具。

经典答案:RegEx match open tags except XHTML self-contained tags

您接受的答案给出了错误的答案,例如:

  • 它在允许空格的地方不接受空格,例如在“>”之前

  • 它将匹配一个注释掉的元素,或者一个出现在 CDATA 部分中的元素

  • 它进行贪婪匹配,因此它会找到最后一个匹配的结束标记,而不是第一个。

无论你多么努力,你永远无法做到 100% 正确。

如果您更关心性能而不是正确性,那么由于需要回溯,它的效率也会非常低。

要正确且专业地完成这项工作,请使用 XML 解析器。


推荐阅读