java - 正则表达式在多行字符串中查找 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 个空格作为制表符,但真正的字符串将包含制表符。
解决方案
不要使用正则表达式来解析 XML:它是不适合这项工作的工具。
经典答案:RegEx match open tags except XHTML self-contained tags
您接受的答案给出了错误的答案,例如:
它在允许空格的地方不接受空格,例如在“>”之前
它将匹配一个注释掉的元素,或者一个出现在 CDATA 部分中的元素
它进行贪婪匹配,因此它会找到最后一个匹配的结束标记,而不是第一个。
无论你多么努力,你永远无法做到 100% 正确。
如果您更关心性能而不是正确性,那么由于需要回溯,它的效率也会非常低。
要正确且专业地完成这项工作,请使用 XML 解析器。
推荐阅读
- javascript - 如何向 NodeJS Express 网站添加验证码?
- javascript - 尝试根据 URL 参数将 jpg 加载到页面上
- python - Jupyter 缺少版本元数据
- jsonschema - 允许任何字符串用于属性定义 Json Schema
- sql - SQL脚本从每个数据库的同一个表中选择信息?
- python - 更长的等待时间。直到在 python selenium 中超时
- django - 你能解释一下这个简单的 django 函数发生了什么吗?formset=OrderFormSet(request.POST,instance=customer)
- latex - 如何在乳胶中自动断线?
- spring-batch - 如何为 Spring Batch 项目中的每个步骤创建自定义 ItemReader
- android - Xamarin ExifInterface.SaveAttributes 覆盖没有图像数据的图像