是否有正則表達式來匹配數字範圍,例如: 1 - 20?是否有正則表達式來匹配數字範圍,並確保它是一個有效的範圍?
如果是這樣,是否有可能確保左值始終小於正確值?如果有一個範圍是沒有意義的,例如20 - 1或15 - 5
是否有正則表達式來匹配數字範圍,例如: 1 - 20?是否有正則表達式來匹配數字範圍,並確保它是一個有效的範圍?
如果是這樣,是否有可能確保左值始終小於正確值?如果有一個範圍是沒有意義的,例如20 - 1或15 - 5
正如評論者所指出的:如果在正則表達式中這是可能的,那將是非常困難的。在正則表達式中沒有直接的支持來進行算術比較(包括大於)。
更好地使用正則表達式來驗證格式並捕獲這兩個數字。如果正則表達式匹配,則使用宿主語言將捕獲轉換爲數字並進行比較。
是的,你可以做到這一點。您可以確保給定的數字小於同一文本中的另一個數字。
此正則表達式測試所述第一數目是否大於下一個編號較小的:格式: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#正則表達式創建和測試的。
不幸的是我不認爲這是可能的,或者至少沒有一個可怕的長正則表達式(儘管我會很高興被證明是錯誤的)。 – Meep3D 2012-08-09 09:52:54
這很可能*可能*,但這並不意味着你應該這樣做。正則表達式對於這個問題是一個[*完全錯誤的*選擇](http://stackoverflow.com/a/4098123/395760)。 – delnan 2012-08-09 09:54:53
您應該使用數字運算符來比較數字。正則表達式只是匹配模式。 – npinti 2012-08-09 09:59:10