Według Generate a Regular Expression to Match an Arbitrary Numeric Range, a po wygenerowaniu takiego regex dla przykładu w 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
by rade.
Proces będzie (jeszcze po Regex generatora)
pierwsze, podzielić na równe długości wynosi:
110 - 999
1000 - 2234
drugie, podzielić na grupy, które dają proste regexes :
110 - 199
200 - 999
1000 - 1999
2000 - 2199
2200 - 2229
2230 - 2234
Włącz każdy zakres w 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]
Collapse sąsiednie uprawnień 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]
Łączenie wyrażeń regularnych powyżej wydajności:
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])
Następny postaramy faktoringu wspólne przedrostki użyciem drzewa:
Parse do drzewa w oparciu o regex prefiksów:
. 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]
Włączanie drzewo składniowy w Wydajność zwrotna:
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])))
Wybieramy krótszy jako nasz wynik.
\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
Tak, jest to możliwe. Tak więc tniesz paznokcie za pomocą działającej piły łańcuchowej. Nie są też bardzo dobre pomysły. – paxdiablo