【问题标题】:[A-z0-9]+ regexp matching square brackets [duplicate][A-z0-9]+ regexp matching square brackets [duplicate]
【发布时间】:2015-04-11 13:30:36
【问题描述】:

我正在为以下正则表达式苦苦挣扎

[A-z0-9]+

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

||a919238[.--a]asd|

它返回a919238[,包括方括号。我尝试输入my test case on regex101 以了解问题所在,但站点正则表达式解释没有帮助,可能我看不到我的错误。

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

【问题讨论】:

  • 看看ASCII table——A和z之间有哪些字符?
  • @georg 方括号!谢谢
  • 嗯,我以前从未使用过 A-z,但我想这很好!我一直使用 A-Za-z0-9 来明确范围。
  • 优于[a-Z] :-)
  • @Jonny5 是的,我同意。所以我的也是那个问题的副本。我已经准备好关闭我的问题(我提到)作为重复但为什么我重新打开这个?我没有说我提到的问题是规范问题,或者我是第一个为此类问题发布答案的人。

标签: regex


【解决方案1】:

因为

[A-z0-9]+ 
 ↑ ↑ 

是从Az,见ASCII表,]出现在两个字符之间:

【讨论】:

  • 你也用过吗?你是怎么标记方格的?
  • 嗯。 41/101 - 61/141 对称性很好,但这个问题很好地说明了为什么 ASCII 有 A-Z,a-z 彼此相邻会很好。然后我们还将符号放在一起,因此可以匹配例如[@-~]。知道为什么它是这样布置的吗?
  • 这就是为什么你经常看到[A-Za-z]而不是[A-z]的原因:排除所有这些多余的字符。
  • @OllieFord IMO 之所以这样,是因为最早的计算机是科学设备,科学家们不会对此特别烦恼。有人刚刚这样定义它,它就一直这样。
  • @OllieFord 您可以单独使用第五位在大写和小写之间切换。
【解决方案2】:
A===>64
z===>122
[===>91

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

【讨论】:

  • 太好了,我也想从结果中删除方括号,谢谢!
  • @BeNdErR 如果你可以允许_,那么你可以使用\w ....
  • @GrijeshChauhan \w[A-Za-z_] 在任何支持 Unicode 的正则表达式方言中都不等效。
  • @Slade 嗯..你是对的。 a question is also asked 在 SO 过去
【解决方案3】:

您可以使用/[a-z0-9]+/ii 使其不区分大小写)或/[A-Za-z0-9]+/

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 2015-01-07
    • 2011-11-09
    • 2021-11-09
    • 2015-02-11
    • 2012-03-26
    • 2010-12-11
    • 1970-01-01
    • 2012-05-15
    相关资源
    最近更新 更多