有没有办法在oXygen查找/替换对话框中使用XPath约束锚定正则表达式,以便它匹配匹配的XPath字符串的开头?到目前为止," ^"当我尝试使用XPath对话框时,将无法匹配任何内容。
例如,给出输入文件
<fruit>
<apple>Graham</apple>
</fruit>
正则表达式
^Graham
使用XPath
fruit/apple
不会选择任何内容。如果我没有在XPath中输入任何内容,^
会正确选择行的开头。 &#34;正则表达式&#34;框被检查,我已经测试了我的XPath。如果我从我的正则表达式中取出锚点,它将在字符串上正确匹配。我唯一能做的就是锚。我错过了什么吗?
答案 0 :(得分:0)
在Oxygen的“查找/替换”窗口中,^
和$
与文件中的行相关。即使指定了XPath过滤器,它们也不会匹配XPath元素的开头或结尾。
^
匹配字符串中第一个字符前的位置。 ^
无法在&#34; Graham&#34;之前的位置匹配因为它前面没有换行符 - 无论是否有XPath,前面的字符都不是换行符。锚本身与每行的开头匹配,因为这些实例中的前一个字符是换行符。
\A
只在字符串的开头匹配;但是,XPath不支持\A
或\Z
。通常,由于XPath对类似Perl的正则表达式的不合规支持,在Oxygen的查找/替换对话框中使用XPath时,您将被限制为插入符号;但是,Oxygen中的查找/替换正则表达式支持是完整的Java正则表达式集,与XPath正则表达式不同;因此,您可以使用\A
或\Z
,而不仅仅是^
和$
。
在Oxygen中,如果想要匹配XML元素的开头,则使用查找/替换相关元素,例如<apple[^>]+>Graham
或更好,只需使用XPath字段查找//apple[matches(., '^Graham')]
,因为在XPath语法中^
和$
相对于字符串的开头/结尾而不是行。
半文档撒克逊语扩展之一是在使用!
标志时允许在XPath中使用Java正则表达式构造。例如,启用\b
(字边界)和正/负前瞻。