我必须处理有时包含未转义的&符号的XML数据,我无法让生产者将其转义为&或将其放入CDATA部分。
现在我正在寻找一个正则表达式替换&与&放大器;如果它不是实体的一部分。像这样:&(?!(amp | quot | quot | lt; gt);)
不幸的是,我的编程环境只支持“扩展的POSIX 1003.2正则表达式”(参见http://www.kernel.org/doc/man-pages/online/pages/man7/regex.7.html),它似乎缺少运算符“!”需要在这里。
任何想法如何制作必要的正则表达式?
答案 0 :(得分:4)
横向思维:将所有&
替换为&
,然后将所有&apos
(等)替换为&apos
(例如)?您可以使用组来捕获要放回的部分 - &(apos)
答案 1 :(得分:0)
您可以搜索与正面正则表达式不匹配的内容,而不是搜索与正面正则表达式相匹配的内容,而不是:
! ... &(?(amp|apos|quot|lt|gt);)
我没有阅读你链接的整个页面,但我很确定它应该是可能的。