我想用 RegExp 匹配 X 和 Y 之间的数字。这可能吗?
([0-9]+) 将匹配任何数字,我该如何匹配 110 和 2234 之间的数字?
根据生成正则表达式以匹配任意数字范围 http://code.activestate.com/recipes/534137/,并在为您的示例生成这样的正则表达式之后正则表达式_For_Range https://web.archive.org/web/20151029043426/http://utilitymill.com/utility/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
就可以了。
该过程将是(仍然遵循正则表达式生成器):
首先,分成相等长度的范围:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)