正则表达式[A-z]和[a-zA-Z]之间的区别

时间:2011-02-07 15:56:53

标签: java regex

我正在使用正则表达式为文本框编写输入验证器,我只想要字母字符。我想知道[A-z][a-zA-Z]是否相同,或者是否存在性能差异。

我继续在我的搜索中阅读[a-zA-Z],而没有提及[A-z]

我正在使用java的String.matches(regex)

6 个答案:

答案 0 :(得分:77)

[A-z]将匹配Az范围内的ASCII字符,而[a-zA-Z]将匹配A到{{范围内的ASCII字符1}} ,范围从Za。乍一看,这可能看起来相同 - 但是,如果您查看this table个ASCII字符,您会看到z包含其他几个字符。具体来说,它们是A-z[\]^_(您显然不需要)。

答案 1 :(得分:12)

az匹配'a'到'z'AZ匹配'A'到'Z'Az匹配所有这些以及'Z'和'a'之间的字符是[] ^ / _` << / p>

请参阅http://www.asciitable.com/

答案 2 :(得分:9)

看看ASCII table。您会发现Za之间存在一些字符,因此您的匹配将超出您的预期。

答案 3 :(得分:8)

当您查看ASCII表时,您将看到以下内容:

A = 65
Z = 90
a = 97
z = 122

因此,[A-z]将匹配65到122之间的每个字符。这包括这些字符(91 -> 97):

 [\]^_`

这意味着[A-Za-z]将只匹配字母,而没有注意到的字符

答案 4 :(得分:7)

方括号创建一个字符类,连字符是在两个提供的字符之间添加每个字符的简写。即[A-F]可以写成[ABCDEF]

字符类[A-z]将匹配这些字符之间的每个字符,ASCII中包含一些其他字符,例如'[','\'和']'。

指定这两种情况的另一种方法是使用/i修饰符将正则表达式设置为不区分大小写。

答案 5 :(得分:4)

看一下ASCII chart(Java字符所依据的):Z和a之间有很多标点符号,即:

[\]^ _`