1

有没有办法在 oXygen 查找/替换对话框中使用 XPath 约束锚定正则表达式,使其匹配匹配 XPath 字符串的开头?到目前为止,当我尝试将对话框与 XPath 一起使用时,“^”不会匹配任何内容。

例如,给定一个输入文档

<fruit>
    <apple>Graham</apple>
</fruit>

正则表达式

^Graham

使用 XPath fruit/apple

不会选择任何东西。如果我没有在 XPath 中输入任何内容,则^正确选择行首。“正则表达式”框被选中,我已经测试了我的 XPath。如果我从我的正则表达式中取出锚点,它将在字符串上正确匹配。我唯一不能去工作的是锚。我错过了什么吗?

4

1 回答 1

0

在 Oxygen 的 Find/Replace 窗口中,^$文件中的行相关。即使您指定了 XPath 过滤器,它们也不匹配 XPath 元素的开头或结尾。

^匹配字符串中第一个字符之前的位置。^无法在“Graham”之前的位置匹配,因为它前面没有换行符——无论有没有 XPath,前面的字符都不是换行符。锚本身与每一行的开头匹配,因为这些实例中的前一个字符是换行符。

\A只匹配字符串的开头;但是,XPath 不支持\A\Z. 通常,在 Oxygen 的查找/替换对话框中使用 XPath 时,由于 XPath 对类似 Perl 的正则表达式的支持不合格,因此您将被限制为插入符号;但是,Oxygen 中的 Find/Replace 正则表达式支持是全套 Java 正则表达式,这与 XPath 正则表达式不同;因此,您可以使用\Aor \Z,您不会只使用^and $

在 Oxygen 中,如果想要匹配 XML 元素的开头,则对相关元素使用 Find/Replace,例如<apple[^>]+>Graham或者更好地使用 XPath 字段来查找//apple[matches(., '^Graham')],因为在 XPath 语法中^并且$相对于字符串的开头/结尾,不是线条。

半文档化的 Saxon 扩展之一是在您使用!标志时允许在 XPath 中构建 Java 正则表达式。例如,启用\b(字边界)和正/负前瞻。

于 2015-05-31T20:02:14.653 回答