为了账号安全,请及时绑定邮箱和手机立即绑定

为什么[01-12]射程不能像预期的那样工作?

为什么[01-12]射程不能像预期的那样工作?

MYYA 2019-06-26 17:26:12
为什么[01-12]射程不能像预期的那样工作?我在试着用范围图[01-12]在regex中匹配两位数毫米,但这并不像预期的那样工作。
查看完整描述

3 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您似乎误解了regex中字符类定义的工作方式。

匹配任何字符串0102030405060708091011,或12,像这样的东西起作用了:

0[1-9]|1[0-2]

参考文献


解释

字符类本身试图匹配一个,也就是一个输入字符串中的字符。[01-12]实际定义[012],一个字符类,它将输入中的一个字符与这3个字符中的任何一个进行匹配。01,或2.

这个-范围定义从11,其中包括1..另一方面,就像[1-9]包括123456789.

初学者经常犯定义如下的错误[this|that]..这“行不通”。此字符定义[this|a]中的6个字符中的任何一个与输入中的一个字符匹配。this|a..极有可能(this|that)这就是我们的意图。

参考文献


如何定义范围

所以现在很明显,像这样的模式between [24-48] hours不起作用。本例中的字符类等效于[248].

那是,-在字符类中,定义不定义模式中的数字范围。除了有限的重复语法外,Regex引擎并不真正“理解”模式中的数字。a{3,5}3至5之间的比赛a).

范围定义使用字符的ASCII/Unicode编码来定义范围。人物0在ASCII中编码为十进制48;9是57岁。因此,字符定义[0-9]包括编码中值介于小数48至57之间的所有字符。从设计上来说,这些都是非常明智的。01, ..., 9.

另见


另一个例子:A到Z

让我们来看看另一个常见的字符类定义[a-zA-Z]

在ASCII:

  • A = 65, Z = 90

  • a = 97, z = 122

这意味着:

  • [a-zA-Z]

    [A-Za-z]

    等价物
  • 在大多数口味中,

    [a-Z]

    很可能是非法字符范围
    • 因为

      a

      (97)“大于”

      Z (90)

  • [A-z]

    是合法的,但也包括以下六个字符:
    • [ (91), \ (92), ] (93), ^ (94), _ (95), ` (96)

相关问题


查看完整回答
反对 回复 2019-06-26
?
潇湘沐

TA贡献1816条经验 获得超6个赞

这也适用于:

^([1-9]|[0-1][0-2])$

[1-9]匹配1到9之间的个位数

[0-1][0-2]匹配10到12之间的两位数

有一些很好的例子这里


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 402 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信