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

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

我在试着用范围图[01-12]在regex中匹配两位数毫米,但这并不像预期的那样工作。



MYYA
浏览 409回答 3
3回答

杨__羊羊

您似乎误解了regex中字符类定义的工作方式。匹配任何字符串01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11,或12,像这样的东西起作用了:0[1-9]|1[0-2]参考文献正则表达式.info/字符类数值范围(有许多关于将字符串解释为数值范围的示例)解释字符类本身试图匹配一个,也就是一个输入字符串中的字符。[01-12]实际定义[012],一个字符类,它将输入中的一个字符与这3个字符中的任何一个进行匹配。0, 1,或2.这个-范围定义从1到1,其中包括1..另一方面,就像[1-9]包括1, 2, 3, 4, 5, 6, 7, 8, 9.初学者经常犯定义如下的错误[this|that]..这“行不通”。此字符定义[this|a]中的6个字符中的任何一个与输入中的一个字符匹配。t, h, i, s, |或a..极有可能(this|that)这就是我们的意图。参考文献用于分组的正则表达式.info/括号和与垂直杆交替如何定义范围所以现在很明显,像这样的模式between [24-48] hours不起作用。本例中的字符类等效于[248].那是,-在字符类中,定义不定义模式中的数字范围。除了有限的重复语法外,Regex引擎并不真正“理解”模式中的数字。a{3,5}3至5之间的比赛a).范围定义使用字符的ASCII/Unicode编码来定义范围。人物0在ASCII中编码为十进制48;9是57岁。因此,字符定义[0-9]包括编码中值介于小数48至57之间的所有字符。从设计上来说,这些都是非常明智的。0, 1, ..., 9.另见Wikipedia/ASCII另一个例子:A到Z让我们来看看另一个常见的字符类定义[a-zA-Z]在ASCII:A = 65, Z = 90a = 97, z = 122这意味着:[a-zA-Z]和[A-Za-z]等价物在大多数口味中,[a-Z]很可能是非法字符范围因为a(97)“大于”Z (90)[A-z]是合法的,但也包括以下六个字符:[ (91), \ (92), ] (93), ^ (94), _ (95), ` (96)相关问题正则表达式[a-Z]有效吗?如果是,则与[a-Za-Z]相同吗?

潇湘沐

这也适用于:^([1-9]|[0-1][0-2])$[1-9]匹配1到9之间的个位数[0-1][0-2]匹配10到12之间的两位数有一些很好的例子这里
打开App,查看更多内容
随时随地看视频慕课网APP