如果我有一个正则表达式[0-Z]
or [a-Z]
- 它会匹配什么字符?它是有效的正则表达式吗?你可以在0-9
,a-z
和之外有正则表达式的范围A-Z
吗?
4 回答
是的,您可以有其他范围。来自MSDN - 正则表达式中的字符类(粗体是我的):
指定字符范围的语法如下:
[firstCharacter-lastCharacter]
where
firstCharacter
是开始范围lastCharacter
的字符,是结束范围的字符。字符范围是通过指定系列中的第一个字符、连字符 (-
) 和系列中的最后一个字符来定义的一系列连续字符。如果两个字符具有相邻的 Unicode 代码点,则它们是连续的。
所以,最后,[0-Z]
会匹配0123456789:;<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ
。您可以检查ASCII 表中的0-Z
.
至于[a-Z]
,因为他们没有指定一个连续的系列,他们不应该匹配任何东西。
请记住,对于一般规则,效果可能很广泛:Unicode 字符代码,而不仅仅是 ASCII - 当然,最终,它取决于实现,所以,如果有疑问,请检查它。
该范围[0-Z]
是有效的,取决于正则表达式引擎[a-Z]
将是无效的,或者它将是一个不能匹配任何字符的范围。在字符类范围中,开始和结束字符只是代码点,这些代码点之间的所有字符都将包含在该范围内。
在 的情况下[0-Z]
,这等效于以下更具可读性的字符类:
[0-9:;<=>?@A-Z]
在 的情况下[a-Z]
,这实际上是一个不会匹配任何内容的字符类,因为a
它的代码点比Z
.
您可以从http://www.asciitable.com/查看以下 ASCII 表中的代码点:
您可以创建任何范围,只要字符的 unicode 值的顺序是从低到高。以ascii 为例。 a
比 高Z
,所以范围a-Z
无效。该范围A-z
是有效的,但您应该注意这包括非字母字符,如^
和[
。 0-Z
也是有效的,包括:
,?
和一大堆您可能不想要的其他字符。
要回答您的问题,您可以按正确的顺序创建任何范围。使用类似的东西可能没有用A-z
,但类似的东西a-d
很常见。
正则表达式引擎可能会对无序或无效的范围做出不同的反应。
范围取决于字符的(unicode)值。[0-9] 的范围是有意义的,但 [9-0] 的范围没有意义。同样,从 [aZ] 开始的范围将为空,因为 'a' 大于 'Z'。(所有大写字母在前,'Z' 和 'a' 之间有中间字符)。依靠一个字符值表(在 Windows 上调出charmap),不要花哨。