正则表达式[a-Z]是否有效,如果是,那么它是否与[a-zA-Z]相同?

时间:2009-11-01 23:59:43

标签: regex

正则表达式[a-Z]是否有效,如果是,那么它是否与[a-zA-Z]相同? 请注意,在[a-Z]中,a为小写,Z为大写。

编辑:

我收到一些答案,指出虽然[a-Z]无效,但[A-z]有效(但不会与[a-zA-Z]相同),这正是我所寻找的。 因为我想知道一般是否可以用更紧凑的版本替换[a-zA-Z]。

感谢所有为答案做出贡献的人。

7 个答案:

答案 0 :(得分:34)

不,a(97)高于Z(90)。 [a-Z]不是有效的字符类。但是[A-z]也不等同,但原因不同。它将覆盖所有字母,但也包括大写和小写字母之间的字符:[\]^_`

答案 1 :(得分:4)

我不确定其他语言的实现,但在PHP中你可以做到

"/[a-z]/i"

它会不区分大小写。对于其他语言可能有类似的东西。

答案 2 :(得分:3)

您没有指定哪种语言,但一般[a-Z]不是有效范围,因为在ASCII中,小写字母大写字母后[A-z] 可能是有效范围(表示所有上限和下限字母以及Za之间显示的标点符号),但它可能不是,具体取决于您的具体实施。可以将i标志添加到正则表达式以使其不区分大小写;检查您的特定实现,以获取有关如何指定该标志的说明。

答案 3 :(得分:2)

您可以随时尝试:

 print "ok" if "monkey" =~ /[a-Z]/;

Perl说

Invalid [] range "a-Z" in regex; marked by <-- HERE in m/[a-Z <-- HERE ]/ at a-z.pl line 4.

答案 4 :(得分:2)

如果它有效,它将无法满足您的期望。

Z的字符代码低于a的字符代码,因此如果代码交换为[Z-a]范围,则它将与[Z\[\\\]^_`a]相同,即它将包括字符Za以及。之间的字符。

如果您使用[A-z]获取所有大写和小写字符,这仍然与[A-Za-z]不同,则与[A-Z\[\\\]^_`a-z]相同。

答案 5 :(得分:1)

不,它无效,可能是因为ASCII值不是从z连续到A.

答案 6 :(得分:1)

我刚刚在剧本(不是我自己的)中摔倒了。

似乎grep,awk,sed根据您的语言环境接受[a-Z](即LANG或LC_CTYPE环境变量)。在POSIX中,这些工具不允许使用[a-Z],但在某些其他区域设置(例如en_gb.utf8)中,它可以使用,并且与[a-zA-Z]相同。

是的,我已经检查过,它与_^[]`中的任何一个都不匹配。

鉴于调试花费了相当长的时间,我强烈反对任何人在正则表​​达式中使用[a-Z]