如果我的正则表达式为[0-Z]
或[a-Z]
- 它会匹配哪些字符?它是有效的正则表达式吗?你能在0-9
,a-z
和A-Z
之外的正则表达式中使用范围吗?
答案 0 :(得分:3)
是的,您可以拥有其他范围。来自MSDN - Character Classes in Regular Expressions(粗体是我的):
指定字符范围的语法如下:
[firstCharacter-lastCharacter]
其中
firstCharacter
是开始范围的字符,lastCharacter
是结束范围的字符。字符范围是一系列连续的字符,通过指定系列中的第一个字符,连字符(-
),然后是系列中的最后一个字符来定义。 如果两个字符具有相邻的Unicode代码点,则它们是连续的。
因此,最后,[0-Z]
将匹配0123456789:;<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ
。您可以查看0-Z
的{{3}}。
对于[a-Z]
,因为它们没有指定连续的系列,所以它们应该不匹配。
请记住,对于一般规则,效果可以很宽:Unicode字符代码,而不仅仅是ASCII - 当然,最终取决于实现,因此,如果有疑问,请检查它。
答案 1 :(得分:2)
范围[0-Z]
有效,具体取决于正则表达式引擎[a-Z]
将无效,或者它将是一个无法匹配任何字符的范围。在字符类范围中,开始和结束字符只是代码点,这些代码点之间的所有字符都将包含在范围内。
对于[0-Z]
,这相当于以下更易读的字符类:
[0-9:;<=>?@A-Z]
对于[a-Z]
,这实际上是一个与任何内容都不匹配的字符类,因为a
的代码点高于Z
。
您可以在http://www.asciitable.com/中查看以下ASCII表中的代码点:
答案 2 :(得分:1)
范围取决于角色的(unicode)值。 [0-9]的范围是有道理的,但[9-0]的范围不是。同样,[a-Z]的范围将为空,因为'a'大于'Z'。 (所有大写字母都是第一个,'Z'和'a'之间有干涉字符)。依靠一个字符值表(在Windows上拉起charmap),并没有得到花哨。
答案 3 :(得分:1)
只要字符的unicode值的顺序越低越好,您就可以创建任何范围。以ascii for example为准。 a
的排名高于Z
,因此范围a-Z
无效。范围A-z
有效,但您应注意,这包括非字母字符,例如^
和[
。 0-Z
也有效,包括:
,?
以及您可能不想要的一大堆其他字符。
要回答您的问题,您可以按正确的顺序创建任何范围。使用像A-z
这样的东西可能没什么用,但像a-d
这样的东西很常见。
正则表达式引擎可能会对无序或无效的范围做出不同的反应。