2012-08-09 43 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#正则表达式创建和测试的。

相关问题