使用 SaxonJ HE 在 XPath 中转义正则表达式

问题描述 投票:0回答:1

我正在尝试使用 SaxonJ HE 12 (java) 在 XPath 表达式的

matches()
参数中使以下负向前瞻工作:

//test[matches(me, '(?!0115)[0-9]{4}')]

我知道我需要转义一些字符,如

\()
(可能还有
?
),因为这些字符也与 Java 相关,但我所有的尝试都失败了。正则表达式告诉匹配除
0115
之外的 4 位数字,它本身工作得很好,但它不会一次嵌入到 XPath 表达式中。

这里是可以使用的游乐场:xpath测试该网页专门使用Saxon HE java引擎,我不想(不能)使用另一个引擎。

我知道这里的解决方法,这只是在选择器中添加另一个条件

... and me!='0115'
但我希望它能够工作,因为我有其他复杂的正则表达式。

这是 XPath 的限制吗?还是撒克逊语中的错误?

java xpath saxon xpath-2.0
1个回答
1
投票

使用

//test[matches(me, '(?!0115)[0-9]{4}', ';j')]
,负向先行仅受 Java 正则表达式语法支持,标准 XPath 语法不支持。

© www.soinside.com 2019 - 2024. All rights reserved.