Regex 替换CDATA中的HTML标记
我想替换CDATA元素中的一些HTML标记,但我很难正确使用XSLT中的语法。我收到以下错误消息: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处出错 表
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
<img\s(a[^l]|al[^t]|alt\s*[^=]|[^a>])*> // 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 <img\s(a[^l]|al[^t]|alt\s*[^=]|[^a>])*> // 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