正则表达式锚定在字符类中

时间:2013-05-29 22:59:59

标签: regex xslt xquery

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

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

在字符类中,^$看起来像文字一样;但是,逃避它们(\^\$)也不起作用。

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

3 个答案:

答案 0 :(得分:4)

我认为答案是否定的,您不能将^$作为[]中的锚点,仅作为文字字符。 (我希望你也可以这样做。)

但是,您可以在字符串的正面和背面连接一个空格,然后只需将\s作为单词边界,而不要介意锚点。 E.g。

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

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

答案 1 :(得分:2)

如果你使用analyze-string作为函数,那么可能你正在使用XSLT或XQuery的3.0实现。

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

答案 2 :(得分:0)

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

你可以尝试做一个负面的预测。

(?!\s)