4

我正在尝试解决一个正则表达式难题,并且部分正则表达式始终由以下部分组成:

([^Xa-ehY]|[^f-zW])

或者

([^2]|[^D-Za]|[D-Ze-f])

这些让我很困惑。

以第一个为例:[^Xa-ehY]|[^f-zW]). 这不是表示“不是 Xa-ehY 或不是 f-zW”吗?这不等于“任何角色”吗?举个e例子。它不会匹配第一个,但它会匹配第二个。W不会匹配第二个,但它会匹配第一个。

与 相同([^2]|[^D-Za]|[D-Ze-f])。这意味着“不是 2 OR not D-Ze-f OR D-Ze-f”,对吧?这又相当于“任何字符”。

我错过了什么吗?这只是对单个.正则表达式的复杂替换吗?

4

3 回答 3

4

我认为有些角色是重叠的。例如,在第一个小写字母 h 不会匹配任何一方。

诚然,第二个看起来只是“。”

于 2012-12-18T14:43:55.447 回答
1

因为这是一个谜题,你应该仔细看看。

[^Xa-ehY]|[^f-zW]不一样,因为它们在( contains ).处相交,所以它与hf-zh[^h]

于 2012-12-18T14:44:11.637 回答
1

您可以在正则表达式测试器中向它们扔一堆文本,以查看是否有任何字符重叠。这很粗糙,但是您的第一个示例(\[^Xa-ehY\]|\[^f-zW\])与字母“h”重叠。第二个例子看起来应该匹配任何东西。

于 2012-12-18T14:51:14.743 回答