Según Generate a Regular Expression to Match an Arbitrary Numeric Range, y después de generar una expresión regular como por su ejemplo en 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
que hacer el truco.
el proceso sería (todavía siguiendo ese generador Regex):
En primer lugar, se rompe en la misma longitud oscila:
110 - 999
1000 - 2234
En segundo lugar, romper en rangos que producen expresiones regulares simples :
110 - 199
200 - 999
1000 - 1999
2000 - 2199
2200 - 2229
2230 - 2234
Turn cada rango en una expresión regular:
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]
Collapse poderes adyacentes de 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]
Combinando las expresiones regulares anteriores rendimientos:
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])
A continuación vamos a tratar de factorizar prefijos comunes utilizando un árbol:
Analizar en el árbol basado en prefijos de expresiones regulares:
. 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]
gira el árbol de análisis sintáctico en una regex yields:
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])))
Elegimos el más corto como resultado.
\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
Sí, es posible. También lo es cortar las uñas de los pies con una motosierra en funcionamiento. Tampoco son muy buenas ideas. – paxdiablo