Regex 替换CDATA中的HTML标记

Regex 替换CDATA中的HTML标记,regex,xslt,Regex,Xslt,我想替换CDATA元素中的一些HTML标记,但我很难正确使用XSLT中的语法。我收到以下错误消息: net.sf.saxon.trans.XPathException: Error at character 9 in regular expression "<img(\s+(?![^<>]*alt=["\'])[^<...": expected ()) (line 51) net.sf.saxon.trans.XPathException:正则表达式中字符9处出错 表

我想替换CDATA元素中的一些HTML标记,但我很难正确使用XSLT中的语法。我收到以下错误消息:

net.sf.saxon.trans.XPathException: Error at character 9 in regular 
expression "<img(\s+(?![^<>]*alt=["\'])[^<...": expected ()) (line 51)
net.sf.saxon.trans.XPathException:正则表达式中字符9处出错

表达式“我不认为转义的
括号是问题的根源

查看错误消息,错误在char 9,其中应使用右括号“
”:

<img(\s+(?![^<>]*alt=["\'])[^<...
--------^
这样,您可以逐步找到错误的原因

编辑 根据OP自己的语句,在正则表达式中使用lookahead会导致错误,因此显然这个正则表达式引擎不支持lookahead

仅匹配不包含
alt
属性的
标记并不是绝对需要的。我提出了一种不同的方法:

<img\s(a[^l]|al[^t]|alt\s*[^=]|[^a>])*> // literal form &lt;img\s(a[^l]|al[^t]|alt\s*[^=]|[^a&gt;])*&gt; // XML-encoded form ])*>//文字形式 img\s(a[^l]| al[^t]| alt\s*[^=]|[^a])*//XML编码形式 这头小野兽的功劳归于:。以下是解释:

<img\s ....... start of img tag ( ....... start of alternatives: either a[^l] ....... "a", not followed by "l" | ....... or al[^t] ....... "al", not followed by "t" | ....... or alt\s*[^=] ....... "alt", not followed by an equals sign | ....... or [^a>] ....... neither "a" nor ">" )* ....... end of alternatives, repeat as often as possible > ....... end of image tag ]……既不是“a”也不是“>” )*……结束备选方案,尽可能经常重复 >……图像标签结束
标准免责声明适用:Regex不是处理HTML的最佳工具。使用风险自负。

hmm!只有第一次测试通过。 是的,问题似乎始于帕拉提斯

明天我们将进一步研究。谢谢


T

源XML是什么样子的?我认为XSLT正则表达式不支持lookaheads。 <img\s(a[^l]|al[^t]|alt\s*[^=]|[^a>])*> // literal form &lt;img\s(a[^l]|al[^t]|alt\s*[^=]|[^a&gt;])*&gt; // XML-encoded form <img\s ....... start of img tag ( ....... start of alternatives: either a[^l] ....... "a", not followed by "l" | ....... or al[^t] ....... "al", not followed by "t" | ....... or alt\s*[^=] ....... "alt", not followed by an equals sign | ....... or [^a>] ....... neither "a" nor ">" )* ....... end of alternatives, repeat as often as possible > ....... end of image tag