擅长:python、mysql、java
<p><strong>如果没有重要原因,请不要使用regex解析XML</strong></p>
<p><code>*</code>进行贪婪匹配,但实际上您似乎想要的是<code>*?</code>,因为直到行中的最后一个<code>"</code>而下一个<code>"</code>才匹配。在</p>
<p>因此,只需将cone中的每个<code>*</code>替换为<code>*?</code>,这样就可以了(除了常见的do not regex-XML问题)。在</p>
<p><strong>编辑:</strong></p>
<p>Regex和XML的常见问题是,您的Regex一开始工作得很好,但对于来自其他来源(例如其他导出器或甚至同一导出器的其他版本)的有效XML无效,因为在XML中表达相同内容的方式不同。例如,<code><name att="123"></name></code>或<code><name att="123"/></code>与<code><name att='123' /></code>相同,这与用<code>123</code>&;引号括起来的相同,这可能与<code><a:name att="123"/></code>或{<cd12>}相同,具体取决于命名空间的使用。在</p>
<p>短:</p>
<p>实际上,当无法控制的内容发生变化时,您无法确定正则表达式是否仍然有效。在</p>
<p>但是:</p>
<ul>
<li>在这种情况下,一些解析器也可能产生意外的结果</li>
<li>一些导出程序生成的XML不好,而普通解析器无法正确理解这些XML,因此,如果无法修复这些问题,则需要使用regex等解决方法。在</li>
</ul>