2012-08-09 68 views
0

是否有正則表達式來匹配數字範圍,例如: 1 - 20?是否有正則表達式來匹配數字範圍,並確保它是一個有效的範圍?

如果是這樣,是否有可能確保左值始終小於正確值?如果有一個範圍是沒有意義的,例如20 - 1或15 - 5

+1

不幸的是我不認爲這是可能的,或者至少沒有一個可怕的長正則表達式(儘管我會很高興被證明是錯誤的)。 – Meep3D 2012-08-09 09:52:54

+1

這很可能*可能*,但這並不意味着你應該這樣做。正則表達式對於這個問題是一個[*完全錯誤的*選擇](http://stackoverflow.com/a/4098123/395760)。 – delnan 2012-08-09 09:54:53

+0

您應該使用數字運算符來比較數字。正則表達式只是匹配模式。 – npinti 2012-08-09 09:59:10

回答

0

正如評論者所指出的:如果在正則表達式中這是可能的,那將是非常困難的。在正則表達式中沒有直接的支持來進行算術比較(包括大於)。

更好地使用正則表達式來驗證格式並捕獲這兩個數字。如果正則表達式匹配,則使用宿主語言將捕獲轉換爲數字並進行比較。

0

是的,你可以做到這一點。您可以確保給定的數字小於同一文本中的另一個數字。

此正則表達式測試所述第一數目是否大於下一個編號較小的:格式:XXX,YYY

XXX < YYY:

\b(?:[1-9](?<open>\B\d)+\d*,(?<close-open>\d)+(?(open)(?!))\b 
| 
(?<prefix>\d*)(?:(?<g0>0)|(?<g1>1)|(?<g2>2)|(?<g3>3)|(?<g4>4)|(?<g5>5)|(?<g6>6)|(?<g7>7)|(?<g8>8)|(?<g9>9))(?<suffix>\d)*,\k<prefix>(?(g0)(?!)|(?(g1)0|(?(g2)[01]|(?(g3)[0-2]|(?(g4)[0-3]|(?(g5)[0-4]|(?(g6)[0-5]|(?(g7)[0-6]|(?(g8)[0-7]|(?(g9)[0-8]))))))))))(?<suffix2-suffix>\d)*(?(suffix)(?!)))\b 

XXX> YYY:

(?<open>\B\d|\b[1-9])+,[1-9](?<close-open>\d)+(?(open)(?!))\d*\b 
| 
(?<prefix>\d*)(?:(?<g0>0)|(?<g1>1)|(?<g2>2)|(?<g3>3)|(?<g4>4)|(?<g5>5)|(?<g6>6)|(?<g7>7)|(?<g8>8)|(?<g9>9))(?<suffix>\d)*,\k<prefix>(?(g0)[1-9]|(?(g1)[2-9]|(?(g2)[3-9]|(?(g3)[4-9]|(?(g4)[5-9]|(?(g5)[6-9]|(?(g6)[7-9]|(?(g7)[89]|(?(g8)9|(?(g9)(?!)))))))))))(?<suffix2-suffix>\d)*(?(suffix)(?!)) 

如果你想使用 - 作爲分隔符,你只需要用這個正則表達式替換。這個正則表達式是使用C#正則表達式創建和測試的。

相關問題