是否有正则表达式匹配数值范围,并确保它是有效范围?

时间:2012-08-09 09:48:51

标签: regex

是否有正则表达式来匹配数值范围,例如1 - 20?

如果是这样,是否可以确保左值始终小于正确的值?拥有一个范围是没有意义的,例如20 - 1或15 - 5

2 个答案:

答案 0 :(得分:0)

评论员注意到:如果在正则表达式中这是可能的,那将非常困难。没有直接支持在正则表达式中进行算术比较(包括大于)。

最好使用正则表达式来验证格式并捕获这两个数字。如果正则表达式匹配,则使用宿主语言将捕获转换为数字并进行比较。

答案 1 :(得分: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&gt; 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#regex创建和测试的。