示例 |
正则表达式示例 |
数字范围 |
浮点数 |
电子邮件地址 |
IP 地址 |
有效日期 |
数字日期转文本 |
信用卡号 |
匹配整行 |
删除重复行 |
编程 |
两个相邻单词 |
陷阱 |
灾难性回溯 |
重复次数太多 |
拒绝服务 |
使所有内容都可选 |
重复捕获组 |
混合 Unicode 和 8 位 |
更多此类信息 |
简介 |
正则表达式快速开始 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式示例 |
正则表达式参考 |
替换字符串参考 |
书评 |
可打印 PDF |
关于此网站 |
RSS 源和博客 |
由于正则表达式处理的是文本而不是数字,因此匹配给定范围内的数字需要格外小心。您不能只写[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])$。
以下是您可能希望匹配的几个更常见的范围
| 快速入门 | 教程 | 工具和语言 | 示例 | 参考 | 书籍评论 |
| 正则表达式示例 | 数字范围 | 浮点数 | 电子邮件地址 | IP 地址 | 有效日期 | 数字日期转文本 | 信用卡号 | 匹配完整行 | 删除重复行 | 编程 | 两个相近的单词 |
| 灾难性回溯 | 过多重复 | 拒绝服务 | 使所有内容变为可选 | 重复捕获组 | 混合 Unicode 和 8 位 |
页面 URL: https://regexper.cn/numericranges.html
页面上次更新时间:2021 年 9 月 2 日
网站上次更新时间:2024 年 3 月 15 日
版权所有 © 2003-2024 Jan Goyvaerts。保留所有权利。