当前位置:  开发笔记 > 编程语言 > 正文

如何使用正则表达式匹配X和Y之间的数字?

如何解决《如何使用正则表达式匹配X和Y之间的数字?》经验,为你挑选了2个好方法。

我想在RegExp中匹配X和Y之间的数字.这可能吗?

([0-9] +)将匹配任何数字,我怎么能匹配一个数字,例如,110和2234?



1> VonC..:

根据生成正则表达式以匹配任意数值范围,并在Regex_For_Range为您的示例生成此类正则表达式之后:

\b0*(1[1-9][0-9]|[2-9][0-9]{2}|1[0-9]{3}|2[01][0-9]{2}|22[0-2][0-9]|223[0-4])\b

会做的伎俩.

该过程将(仍然遵循该Regex生成器):

首先,分成相等的长度范围:

110 - 999
1000 - 2234

其次,闯入产生简单正则表达式的范围:

110 - 199
200 - 999
1000 - 1999
2000 - 2199
2200 - 2229
2230 - 2234

将每个范围转换为正则表达式:

1[1-9][0-9]
[2-9][0-9]{2}
1[0-9]{3}
2[01][0-9]{2}
22[0-2][0-9]
223[0-4]

折叠相邻的10:1 [1-9] [0-9] [2-9] [0-9] {2} 1 [0-9] {3} 2 [01] [0-9] {2 22 [0-2] [0-9] 223 [0-4]

结合上面的正则表达式产生:

0*(1[1-9][0-9]|[2-9][0-9]{2}|1[0-9]{3}|2[01][0-9]{2}|22[0-2][0-9]|223[0-4])

接下来我们将尝试使用树来分解公共前缀:
根据正则表达式前缀解析为树:

. 1 [1-9] [0-9]
+ [0-9]{3}
+ [2-9] [0-9]{2}
+ 2 [01] [0-9]{2}
+ 2 [0-2] [0-9]
+ 3 [0-4]

将解析树转换为正则表达式产生:

0*(1([1-9][0-9]|[0-9]{3})|[2-9][0-9]{2}|2([01][0-9]{2}|2([0-2][0-9]|3[0-4])))

我们选择较短的一个作为结果.

\b0*(1[1-9][0-9]|[2-9][0-9]{2}|1[0-9]{3}|2[01][0-9]{2}|22[0-2][0-9]|223[0-4])\b



2> Chas. Owens..:

这不是正则表达式所擅长的.您可能会发现更容易确保您拥有正确的位数/^([0-9]{3,4})$/,然后对捕获进行进一步检查.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有