java 正则替换cdata_正则表达式,用于在尊重CDATA的同时转义HTML和符号

我已经编写了一个内容管理系统,它使用服务器端正则表达式在页面响应被发送到客户机浏览器之前,对其进行转义。正则表达式注意到已经转义或是HTML实体的一部分的符号。例如,以下内容:

a & b, c & d, © 2009

更改为:

a & b, c & d, © 2009

(只有第一个

&

这是从Rails帮助程序获取和修改的正则表达式:

html.gsub(/&(?!([a-zA-Z][a-zA-Z0-9]*|(#\d+));)/) { |special| ERB::Util::HTML_ESCAPE[special] }

虽然这很管用,但确实有问题。正则表达式不知道

]]>

这可能是围绕着未被俘获的符号。这是嵌入式JavaScript保持原样所必需的。例如,这:

//

if (a && b) doSomething();

// ]]>

不幸的是,呈现为:

//

if (a && b) doSomething();

// ]]>

哪些JavaScript引擎当然不理解。

我的问题是:是否有一种方法可以修改正则表达式,使其完全按照现在的方式执行,除非它使CDATA节中的文本保持不变?

由于正则表达式开头不那么简单,所以这个问题可能更容易回答:是否可以编写一个正则表达式,将除a'之间的字母以外的所有字母都改为句点?

<

“A”

>

“?例如,一个会改变的

"some are < safe! >"

进入之内

".... ... < safe! >"

?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值