[英]How to write proper regex to recognize the XML content?
我有一些内容,我想知道它们是否是XML
。 怎么做 ? 我只需要从方法返回类型中知道答案是true
还是false
。 我打算使用正则表达式,但愿意提供更好的建议。
XML
内容如下,格式始终相同(可能是分子 ID 增加或减少),
<?xml version="1.0" encoding="UTF-8"?>
<molecules>
<molecule id="1">
<atoms>
<atom id="1" symbol="C"/>
<atom id="2" symbol="C"/>
<atom id="3" symbol="N"/>
</atoms>
<bonds>
<bond id="1" atomAId="1" atomBId="2" order="SINGLE"/>
<bond id="2" atomAId="2" atomBId="3" order="DOUBLE"/>
</bonds>
</molecule>
<molecule id="2">
<atoms>
<atom id="1" symbol="C"/>
<atom id="2" symbol="C"/>
<atom id="3" symbol="N"/>
</atoms>
<bonds>
<bond id="1" atomAId="1" atomBId="2" order="SINGLE"/>
<bond id="2" atomAId="2" atomBId="3" order="DOUBLE"/>
</bonds>
</molecule>
</molecules>
我让正则Regex
识别XML
,如下所示,
public static final String REGEX_FOR_XML = "((<(\\S(.*?))(\\s.*?)?>(.*?)<\\/\\3>)|(<\\S(.*?)(.*?)(\\/>)))";
问题是它只与内部内容匹配,而我想让整个内容匹配。 我使用这个验证器进行匹配,
public static boolean isValidXML(String inXMLStr) {
if (inXMLStr == null || inXMLStr.isEmpty())
return false;
final Pattern pattern = Pattern.compile(Constants.REGEX_FOR_XML);
if (pattern.matcher(inXMLStr).matches()) {
return true;
}
return false;
}
如何更正正则Regex
以与XML
内容匹配或如何做更好的选择?
有一个关于使用正则表达式进行 XML 解析的臭名昭著的答案,我不会链接(@Henrik 无论如何都做了;P)或进入。 但底线:正则表达式很少是进行 XML 验证(或为此进行解析)的好主意。
我建议你去这里: XML 验证 Oracle Docs
我想这应该是你想要的。 看,在 Java 中,您可以使用 Schema-Validation 来验证 XML - 如果我正确阅读了问题,这就是您想要做的。
您需要做的是编写模式定义而不是正则表达式。 这不仅是“正确和直接”的方式,而且维护起来也容易得多。 这不是火箭科学,也不是火箭科学,而且您的架构似乎非常清晰,并且很容易浓缩到 xsd 中。 还有一些工具可以帮助您做到这一点。 不过,这些结果可能仍需进行微调。
注意:我知道在 SO 上不鼓励“仅链接”答案,但是资源太大而无法复制到答案中(至少恕我直言)。 此外,可能有代表 Oracle 的一些版权。 由于它是官方的 Oracle Docs,它也不应该容易出现“断开的链接”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.