我正在尝试使用 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 的限制吗?还是撒克逊语中的错误?
使用
//test[matches(me, '(?!0115)[0-9]{4}', ';j')]
,负向先行仅受 Java 正则表达式语法支持,标准 XPath 语法不支持。