5

如果我有一个正则表达式[0-Z]or [a-Z]- 它会匹配什么字符?它是有效的正则表达式吗?你可以在0-9,a-z和之外有正则表达式的范围A-Z吗?

4

4 回答 4

3

是的,您可以有其他范围。来自MSDN - 正则表达式中的字符类(粗体是我的):

指定字符范围的语法如下:

[firstCharacter-lastCharacter]

wherefirstCharacter是开始范围lastCharacter的字符,是结束范围的字符。字符范围是通过指定系列中的第一个字符、连字符 ( -) 和系列中的最后一个字符来定义的一系列连续字符。如果两个字符具有相邻的 Unicode 代码点,则它们是连续的。

所以,最后,[0-Z]会匹配0123456789:;<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ。您可以检查ASCII 表中的0-Z.

至于[a-Z],因为他们没有指定一个连续的系列,他们不应该匹配任何东西。

请记住,对于一般规则,效果可能很广泛:Unicode 字符代码,而不仅仅是 ASCII - 当然,最终,它取决于实现,所以,如果有疑问,请检查它。

于 2013-10-16T17:25:25.127 回答
2

该范围[0-Z]是有效的,取决于正则表达式引擎[a-Z]将是无效的,或者它将是一个不能匹配任何字符的范围。在字符类范围中,开始和结束字符只是代码点,这些代码点之间的所有字符都将包含在该范围内。

在 的情况下[0-Z],这等效于以下更具可读性的字符类:

[0-9:;<=>?@A-Z]

在 的情况下[a-Z],这实际上是一个不会匹配任何内容的字符类,因为a它的代码点比Z.

您可以从http://www.asciitable.com/查看以下 ASCII 表中的代码点:

在此处输入图像描述

于 2013-10-16T17:30:34.513 回答
1

您可以创建任何范围,只要字符的 unicode 值的顺序是从低到高。以ascii 为例a比 高Z,所以范围a-Z无效。该范围A-z是有效的,但您应该注意这包括非字母字符,如^[0-Z也是有效的,包括:,?和一大堆您可能不想要的其他字符。

要回答您的问题,您可以按正确的顺序创建任何范围。使用类似的东西可能没有用A-z,但类似的东西a-d很常见。

正则表达式引擎可能会对无序或无效的范围做出不同的反应。

于 2013-10-16T17:26:54.857 回答
1

范围取决于字符的(unicode)值。[0-9] 的范围是有意义的,但 [9-0] 的范围没有意义。同样,从 [aZ] 开始的范围将为空,因为 'a' 大于 'Z'。(所有大写字母在前,'Z' 和 'a' 之间有中间字符)。依靠一个字符值表(在 Windows 上调出charmap),不要花哨。

于 2013-10-16T17:24:51.750 回答