如何匹配小于或等于100的数字?

时间:2012-06-13 09:13:22

标签: regex perl

我想匹配一个小于或等于100的数字,它可以是0-100之间的任何数字,但正则表达式不应该匹配大于100的数字,如120,130,150,999,等

7 个答案:

答案 0 :(得分:40)

试试这个

\b(0*(?:[1-9][0-9]?|100))\b

<强>解释

"
\b                # Assert position at a word boundary
(                 # Match the regular expression below and capture its match into backreference number 1
   0              # Match the character “0” literally
      *           # Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
   (?:            # Match the regular expression below
                  # Match either the regular expression below (attempting the next alternative only if this one fails)
         [1-9]    # Match a single character in the range between “1” and “9”
         [0-9]    # Match a single character in the range between “0” and “9”
            ?     # Between zero and one times, as many times as possible, giving back as needed (greedy)
      |           # Or match regular expression number 2 below (the entire group fails if this one fails to match)
         100      # Match the characters “100” literally
   )
)
\b                # Assert position at a word boundary
"

访问(已删除链接)以了解未来的问题。

答案 1 :(得分:6)

正则表达式如何:

^([0-9]|[1-9][0-9]|100)$

这将验证7,82,100的示例,但验证07或082。

Check this out了解有关号码范围检查的更多信息(以及包括零前缀的变体)


如果你需要迎合浮点数,你应该read this,这是一个你可以使用的表达式:

浮点数:^[-+]?([0-9]|[1-9][0-9]|100)*\.?[0-9]+$

答案 2 :(得分:4)

如果您需要正则表达式(最终),请使用代码断言

 /^(.+)$(??{$^N>=0 && $^N<=100 ? '':'^'})/

测试:

my @nums = (-1, 0, 10, 22, 1e10, 1e-10, 99, 101, 1.001e2);

print join ',', grep 
                /^(.+)$(??{$^N>=0 && $^N<=100 ? '':'^'})/,
                @nums

结果:

 0,10,22,1e-010,99

(==&gt; Here is sth. to learn about code assertions)。

答案 3 :(得分:2)

我的实际建议。

就个人而言,我完全不会写这么复杂的正则表达式。如果您的号码在不久的将来从100变为200怎么办?你的正则表达式必须发生重大变化,写起来可能更难。所有上述解决方案都不是自我解释的,您必须在代码中添加注释。那是一种气味。

可读性至关重要。代码适用于人类,而不适用于机器。

为什么不在它周围编写一些代码并保持正则表达式简单易懂。

答案 4 :(得分:1)

匹配0到100

^0*([0-9]|[1-8][0-9]|9[0-9]|100)$

答案 5 :(得分:0)

正则表达式

perl -le 'for (qw/0 1 19 32.4 100 77 138 342.1/) { print "$_ is ", /^(?:100|\d\d?)$/ ? "valid input" : "invalid input"}'

答案 6 :(得分:0)

此regEx与数字0-100 diapason匹配,不允许数字如001:

\b(0|[1-9][0-9]?|100)\b