【问题标题】:A regular expression to clean up XML用于清理 XML 的正则表达式
【发布时间】:2011-05-26 11:00:18
【问题描述】:

我必须处理有时包含未转义 & 符号的 XML 数据,我无法让生产者将其转义到 & 或将其放入 CDATA 部分。

现在我正在寻找一个正则表达式将 & 替换为 & amp;如果它不是实体的一部分。像这样:&(?!(amp|apos|quot|lt|gt);)

不幸的是,我的编程环境只支持“扩展 POSIX 1003.2 正则表达式”(参见http://www.kernel.org/doc/man-pages/online/pages/man7/regex.7.html),它似乎缺少非运算符“!”这里需要。

任何想法如何制作必要的正则表达式?

【问题讨论】:

  • 正确的“XML-ish”响应是通过验证器运行它,并拒绝为“格式不正确的 XML”。遗憾的是,XML 的设计者不允许在现实世界中我们有时不得不忍受糟糕的输入并使用它。
  • @Spudley:我确实通过验证器运行 XML 文件。这就是我注意到畸形部分的方式。不幸的是,它是一个产生无效 XML 的 Microsoft 产品,对他们来说,“标准”似乎意味着“可选”。
  • 呵呵。微软啊?那数字。 (题外话,由于商业支持是管理层经常购买微软的原因,我想知道微软是否准备好为你修复它?当然不会。

标签: xml regex posix


【解决方案1】:

横向思考:将所有& 替换为&amp,然后将所有&apos(等)替换为&apos(例如)?您可以使用一个组来捕获要放回的部分 - &(apos)

【讨论】:

    【解决方案2】:

    您可以搜索与正则表达式不匹配的内容,而不是搜索与负正则表达式匹配的内容,例如:

    ! ... &(?(amp|apos|quot|lt|gt);)
    

    我没有阅读您链接的整个页面,但我很确定应该可以。

    【讨论】:

      猜你喜欢
      • 2011-01-15
      • 1970-01-01
      • 2010-12-31
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      相关资源
      最近更新 更多