正则不擅长做这个,也不是不能做 根据生成正则表达式来匹配任意数值范围, 并在 Regex_For_Range 中为您的示例生成这样的 regex 后: \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 第二, 分断产生简单 regexes 的范围: 110-199 200-999 1000-1999 2000-2199 2200-2229 2230-2234 将每个范围变为 regex: 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] 结合以上 regex: 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]) 接下来, 我们将尝试使用树来分解常用前缀:基于 regex 前缀分析成树: .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 参见: How to match numbers between X and Y with regexp?
正则不擅长做这个,也不是不能做
根据生成正则表达式来匹配任意数值范围, 并在 Regex_For_Range 中为您的示例生成这样的 regex 后:
能实现你的需求:
过程如下 (仍然按那 Regex 生成器步骤操作):
首先, 分成相等的长度范围:
第二, 分断产生简单 regexes 的范围:
将每个范围变为 regex:
折叠相邻的 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]
结合以上 regex:
接下来, 我们将尝试使用树来分解常用前缀:
基于 regex 前缀分析成树:
将分析树转变为正则:
我们选择较短的一个作为我们的结果。
参见:
How to match numbers between X and Y with regexp?