0

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

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

4

2 回答 2

0

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

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

于 2012-08-09T09:58:37.317 回答
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# 正则表达式创建和测试的。

于 2014-02-19T07:00:08.933 回答