8

是否可以在字符类中使用锚点?这不起作用:

analyze-string('abcd', '[\s^]abcd[\s$]') 

它在字符类中看起来像^并且$被视为文字;但是,转义它们 ( \^, \$) 也不起作用。

我正在尝试使用此表达式来创建单词边界(\b在 XSLT/XQuery 中不可用),但我不想使用组((^|\s))——因为非捕获组不可用,这意味着在某些情况下我最终可能会产生大量不需要的捕获组,这就产生了一项新任务,即在一组不需要的捕获组中找到“真正的”捕获组。

4

3 回答 3

6

我相信答案是否定的,你不能在 a 中包含^and$作为锚点[],只能作为文字字符。(我希望你以前也能这样做。)

但是,您可以在字符串的前面和后面连接一个空格,然后只查找\s单词边界,不要介意锚点。例如

analyze-string(concat(' ', 'abcd xyz abcd', ' '), '\sabcd\s')

您可能还想+在 each 之后\s,但这是一个单独的问题。

于 2013-05-30T01:24:33.850 回答
3

如果您将analyze-string其用作函数,那么大概您正在使用 XSLT 或 XQuery 的 3.0 实现。

在那种情况下,为什么说“非捕获组不可用”?XPath Functions and Operators 3.0 规范明确指出“非捕获组也被识别。这些由语法 (?:xxxx) 指示。”

于 2013-05-30T17:34:19.540 回答
0

在第一个方括号之后使用插入符号将否定字符类。它本质上为您提供了与您想要做的相反的事情,这意味着字符类将匹配任何不在字符类中的字符。否定字符类也匹配(不可见的)换行符。

你可以尝试做一个消极的前瞻。

(?!\s)
于 2013-05-29T23:29:27.120 回答