[A-z0-9]+正则表达式匹配方括号

53

我正在苦恼以下正则表达式

[A-z0-9]+

如果针对这个字符串进行测试:

||a919238[.--a]asd|

它返回a919238[,包括方括号...我尝试输入我的正则表达式测试案例来了解问题出在哪里,但是该网站的正则表达式解释并没有帮助,可能是我无法看到自己的错误。

为什么结果中包括方括号?


29
请查看ASCII表,A和z之间有哪些字符? - georg
1
@georg方括号!谢谢 - BeNdErR
8
嗯,我以前从未使用过 A-z,但我想这很好!我一直使用 A-Za-z0-9 来明确指定范围。 - Nelson
4
[a-Z] 更好 :-) - Bergi
@Jonny5,是的,我同意。所以我的问题也是那个问题的重复。我准备关闭我提出的问题作为重复问题,但为什么我要重新打开它呢?我没有说我所提到的问题是规范问题,或者我是第一个回答这种问题的人。 - Avinash Raj
3个回答

116

因为

[A-z0-9]+ 
 ↑ ↑ 

字符范围从Az,可以参考ASCII表格,]出现在这两个字符之间:

enter image description here


1
哦,41/101 - 61/141的对称性很好,但这个问题是为什么ASCII中'A-Z'和'a-z'相邻会很好的一个很好的例子。我们也可以将符号放在一起,例如匹配[@-~]。你有没有想过它为什么被布局成这样? - OJFord
7
这就是为什么您经常看到 [A-Za-z] 而不是 [A-z]:为了排除所有这些额外的字符。 - Brian J
1
@OllieFord 我认为这是因为最早的计算机是科学设备,而科学家并不会特别在意它。只是有人定义了它,并且一直保持这种方式。 - Nelson
8
你可以仅通过第五位二进制数来切换大写和小写。 - Quentin
@OllieFord 这是因为最初只有大写字母可用,然后添加了特殊字符[, \, ], ^, _。而且,后来当[a-z]出现时,它们被添加在所有这些之后,以避免破坏标准。如果现在要构建这个表格,很可能会首先使用[a-z],然后是[A-Z]等等... - Déjà vu
显示剩余10条评论

19
A===>64
z===>122
[===>91

所以它在您定义的范围之间。请使用[A-Za-z0-9]+


2
太好了,我也想从结果中删除方括号,谢谢! - BeNdErR
@BeNdErR 如果您可以允许使用“_”,那么您可以使用“\w”.... - Grijesh Chauhan
1
@GrijeshChauhan 在任何支持Unicode的正则表达式方言中,\w[A-Za-z_]并不等价。 - Slade
@Slade 嗯,你说得对。过去在 SO 上也问过一个类似的问题:链接 - Grijesh Chauhan

8

您可以使用/[a-z0-9]+/i(其中 i 是大小写不敏感的),或者/[A-Za-z0-9]+/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接