【发布时间】:2011-01-17 23:08:59
【问题描述】:
我正在尝试使用 PHP 中的 PCRE 库编写正则表达式。
我需要一个正则表达式来匹配任何 XML 节点的字符串部分中存在的 &、> 和 < 字符,而不是标签声明本身。
输入 XML:
<pnode>
<cnode>This string contains > and < and & chars.</cnode>
</pnode>
这个想法是搜索和替换这些字符并将它们转换为 XML 实体等价物。
如果我要将整个 XML 转换为实体,XML 将如下所示:
整个 XML 转换为实体
<pnode>
<cnode>This string contains > and < and & chars.</cnode>
</pnode>
我需要它看起来像这样:
正确的 XML
<pnode>
<cnode>This string contains > and < and & chars.</cnode>
</pnode>
我曾尝试编写一个正则表达式来使用look-aaead 匹配这些字符,但我不知道如何让它工作。我的尝试(目前只尝试匹配 > 符号):
/>(?=[^<]*<)/g
只是为了说明我正在尝试修复的 XML 来自第 3 方,他们似乎无法最终修复它,因此我尝试修复它。
【问题讨论】:
-
@Rowland,虽然我同意你的观点,但这正是他想要通过转义 >, < 来获取输入并使其变为有效 XML 的观点。和&字符。
-
除非你定义了一个模式,否则你怎么可能知道任何给定的
-
为什么有无效的 XML 开头?是否有可能避免生成格式错误的 XML,而不是在事后尝试修复它?
-
@Camsoft,您是否尝试过将regexlib.com 作为此类事情的资源。如果不是最终解决方案,它可能会提供一些线索。
-
@Camsoft,“值得注意的是,我从第 3 方获取 XML 提要并且无法控制其数据。”不,你会得到一个数据馈送。它不是 XML 提要。如果您的第 3 方说是,他在销售有缺陷的商品。