快速开始
教程
工具和语言
示例
参考
书评
示例
正则表达式示例
数字范围
浮点数
电子邮件地址
IP 地址
有效日期
数字日期转文本
信用卡号
匹配整行
删除重复行
编程
两个相邻单词
陷阱
灾难性回溯
重复次数太多
拒绝服务
使所有内容都可选
重复捕获组
混合 Unicode 和 8 位
更多此类信息
简介
正则表达式快速开始
正则表达式教程
替换字符串教程
应用程序和语言
正则表达式示例
正则表达式参考
替换字符串参考
书评
可打印 PDF
关于此网站
RSS 源和博客
RegexMagic—Generate regular expressions matching integer numbers and ranges

使用正则表达式匹配数字范围

由于正则表达式处理的是文本而不是数字,因此匹配给定范围内的数字需要格外小心。您不能只写[0-255]来匹配 0 到 255 之间的数字。虽然这是一个有效的正则表达式,但它匹配的是完全不同的内容。[0-255]是一个字符类,包含三个元素:字符范围 0-2、字符 5 和字符 5(再次出现)。此字符类匹配单个数字 0、1、2 或 5,就像[0125]一样。

由于正则表达式处理的是文本,因此正则表达式引擎将0视为单个字符,将255视为三个字符。要匹配 0 到 255 之间的所有字符,我们需要一个匹配一个到三个字符之间的正则表达式。

正则表达式[0-9]匹配 0 到 9 的单数字符。[1-9][0-9]匹配 10 到 99 的双数字符。这是简单部分。

匹配三位数字稍微复杂一些,因为我们需要排除 256 到 999 之间的数字。1[0-9][0-9]处理 100 到 199。2[0-4][0-9]匹配 200 到 249。25[0-5]最后添加 250 到 255。

如您所见,您需要将数字范围拆分为具有相同数字位数的范围,并且每个范围都允许每个数字具有相同的变化。在我们的示例中,3 位数范围内,以 1 开头的数字允许后两位数字为任意 10 个数字,而以 2 开头的数字则限制了允许的后两位数字。

使用 交替 将所有这些组合在一起,我们得到:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]。这将匹配我们想要的数字,但有一个需要注意的地方:正则表达式搜索通常允许部分匹配,因此我们的正则表达式将在 12345 中匹配 123。对此有两个解决方案。

搜索数字范围

如果您要在较大的文档或输入字符串中搜索这些数字,请使用 词边界,要求非单词字符(或根本没有字符)位于任何有效匹配之前和之后。然后,正则表达式变为 \b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b。由于交替运算符的优先级最低,因此需要使用 括号 将备选方案组合在一起。这样,正则表达式引擎将尝试匹配第一个词边界,然后尝试所有备选方案,然后尝试匹配匹配的数字之后的第二个词边界。正则表达式引擎将所有字母数字字符以及下划线视为单词字符。

验证数字范围

如果您使用正则表达式验证输入,您可能希望检查整个输入是否由一个有效数字组成。为此,请使用锚点替换单词边界以匹配字符串的开始和结束:^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$

以下是您可能希望匹配的几个更常见的范围