正则表达式中包含哪些字符a-Z?

时间:2013-10-16 17:20:21

标签: regex

如果我的正则表达式为[0-Z][a-Z] - 它会匹配哪些字符?它是有效的正则表达式吗?你能在0-9a-zA-Z之外的正则表达式中使用范围吗?

4 个答案:

答案 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表中的代码点:

enter image description here

答案 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这样的东西很常见。

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