用于清理XML的正则表达式

时间:2010-12-16 09:58:41

标签: xml regex posix

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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

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

我没有阅读你链接的整个页面,但我很确定它应该是可能的。