1

这个问题与正则表达式(regex)中的字符类减法有关。我指的是 XPATH 2.0 第二版的正则表达式风格。

当字符类减法中有负数组时,减法运算符 (-) 之前是否出现过?还是在负组运算符 (^) 之后?

XPATH/XML 模式规范的文本如下。但在我看来,它读起来模棱两可。

对于任何·正字符组·或·负字符组·G,以及任何·字符类表达式·C,GC 是一个有效的·字符类减法·,标识 C(G) 中所有不在 C(G) 中的字符的集合C(C)。

更具体地说,请考虑以下三个正则表达式:

  1. [^abc-[广告]]
  2. [^abc-[^ad]]
  3. [abc-[^ad]]

与干草堆文本匹配:

  • abcdef

什么是可能的匹配文本(第一个和后续)?

4

1 回答 1

2

我不认为该文本是模棱两可的,如果我们足够宽容阅读G-Cas[G-[C]]和否定组,^G, as [^G]。现在,很明显插入符号是第一组的一部分,并且不会否定两个组。

因此,[^abc-[ad]]将匹配:

{除a,b和} 之外的所有字符c} \ {ad} = { 除了a,bc的所有字符d}

请记住,您可以轻松测试以查看行为:)
作为奖励,.Net 正则表达式也支持此功能,使其在线测试更容易一些。
另请参阅:字符类减法

于 2012-01-25T19:26:02.603 回答