首页 > 其他分享 >正则常见问题及解决方案

正则常见问题及解决方案

时间:2023-09-02 22:01:55浏览次数:30  
标签:字符 常见问题 数字 解决方案 可以 正则 使用 写成

使用正则处理问题的基本思路。有一些方法比较固定,比如将问题分解成多个小问题,每个小问题见招拆招:某个位置上可能有多个字符的话,就⽤字符组。某个位置上有多个字符串的话,就⽤多选结构。出现的次数不确定的话,就⽤量词。对出现的位置有要求的话,就⽤锚点锁定位置。

如果是要查找的内容中不能出现某些字符,这种情况比较简单,可以通过使用中括号来排除字符组,比如非元音字母可以使用 [^aeiou]来表示。

常见问题及解决方案

 1、匹配数字

数字的匹配比较简单,通过我们学习的字符组,量词等就可以轻松解决。

  • 数字在正则中可以使用 \d 或 [0-9] 来表示。
  • 如果是连续的多个数字,可以使用 \d+ 或 [0-9]+。
  • 如果 n 位数据,可以使用 \d{n}。
  • 如果是至少 n 位数据,可以使用 \d{n,}。
  • 如果是 m-n 位数字,可以使用 \d{m,n}。

2、匹配正数、负数和小数

如果希望正则能匹配到比如 3,3.14,-3.3,+2.7 等数字,需要注意的是,开头的正负符号可能有,也可能没有,所以可以使用 [-+]? 来表示,小数点和后面的内容也不一定会有,所以可以使用 (?:\.\d+)? 来表示,因此匹配正数、负数和小数的正则可以写成 [-+]?\d+(?:\.\d+)?。

非负整数,包含 0 和 正整数,可以表示成[1-9]\d*|0。

非正整数,包含 0 和 负整数,可以表示成-[1-9]\d*|0。

3、浮点数

负数浮点数表示:-\d+(?:\.\d+)?。

正数浮点数表示:\+?(?:\d+(?:\.\d+)?|\.\d+)。

4、十六进制数

十六进制的数字除了有 0-9 之外,还会有 a-f(或 A-F) 代表 10 到 15 这 6 个数字,所以正则可以写成 [0-9A-Fa-f]+。

5、手机号码

我们可以简单地使用字符组和多选分支,来准确地匹配手机号段。如果只限制前 2 位,可以表示成 1[3-9]\d{9},如果想再精确些,限制到前三位,比如使用1(?:3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[1389])\d{8}来表示。如果想精确到 4 位,甚至 5 位,可以根据公开的号段信息自己来写一下,但要注意的是,越是精确,只要有新的号段,你就得改这个正则,维护起来会比较麻烦。另外,在实际运用的时候,你可能还要考虑一下有一些号码了 +86 或 0086 之类的前缀的情况。

6、身份证号

我国的身份证号码是分两代的,第一代是 15 位,第二代是 18 位。如果是 18 位,最后一位可以是 X(或 x),两代开头都不能是 0,根据规则,你应该能很容易写出相应的正则,第一代可以用 [1-9]\d{14} 来表示,第二代比第一代多 3 位数据,可以使用量词 0 到 1 次,即写成

[1-9]\d{14}(\d\d[0-9Xx])?。

7、邮政编码

邮编一般为 6 位数字,比较简单,可以写成 \d{6},6 位数字在其它情况下出现可能性也非常大,比如手机号的一部分,身份证号的一部分,所以如果是数据提取,一般需要添加断言,即写成 (?<!\d)\d{6}(?!\d)。

8、腾讯 QQ 号码

目前 QQ 号不能以 0 开头,最长的有 10 位,最短的从 10000(5 位)开始。从规则上我们可以得知,首位是 1-9,后面跟着是 4 到 9 位的数字,即可以使用 [1-9][0-9]{4,9} 来表示。

9、中文字符

中文属于多字节 Unicode 字符,但有一些语言是不支持这种属性的,可以通过另外一个办法,就是码值的范围,中文的范围是 4E00 - 9FFF 之间,这样可以覆盖日常使用大多数情况。

不同的语言是表示方式有一些差异,比如在 Python,Java,JavaScript 中,Unicode 可以写成 \u码值 来表示,即匹配中文的正则可以写成 [\u4E00-\u9FFF],如果在 PHP 中使用,Unicode 就需要写成 \u{码值} 的样式。

10、IPv4 地址

IPv4 地址通常表示成 27.86.1.226 的样式,4 个数字用点隔开,每一位范围是 0-255,比如从日志中提取出 IP,如果不要求那么精确,一般使用 \d{1,3}(\.\d{1,3}){3}就够了,需要注意点号需要转义。

我们可以把 IPv4 表示成 X.X.X.X,可以使用量词,写成 (?:X.){3}X 或 X(?:.X){3},由于 X 本身比较复杂,里面有多选分支结构,所以需要把它加上括号,所以 IPv4 的正则应该可以写成

(?:1\d\d|2[0-4]\d|25[0-5]|0?[1-9]\d|0{0,2}\d)(?:\.(?:1\d\d|2[0-4]\d|25[0-5]|0?[1-9]\d|0{0,2}\d)){3}。

11、日期和时间

假设日期格式是 yyyy-mm-dd,应该是 \d{4}-(?:1[0-2]|0?[1-9])-(?:[12]\d|3[01]|0?[1-9])。

时间格式比如是 23:34,如果是 24 小时制,小时是 0-23,分钟是 0-59,所以可以写成 (?:2[0-3]|1\d|0?\d):(?:[1-5]\d|0?\d)。

12、邮箱

邮箱的组成是比较复杂的,格式是 用户名 @主机名,用户名部分通常可以有英文字母,数字,下划线,点等组成,但其中点不能在开头,也不能重复出现。根据 RFC5322 没有办法写出一个完美的正则,我们可以实现一些简体的版本,比如:[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+。

13、网页标签

配对出现的标签,比如 title,一般网页标签不区分大小写,我们可以使用 (?i)<title>.*?</title>来进行匹配。在提取引号里面的内容时,可以使用 [^"]+,方括号里面的内容时,可以使用 [^>]+ 等方式


标签:字符,常见问题,数字,解决方案,可以,正则,使用,写成
From: https://blog.51cto.com/key3feng/7335047

相关文章

  • 振弦采集仪应用于桥梁工程安全监测详细解决方案
    随着城市化进程的不断加速,桥梁作为城市交通基础设施的重要组成部分,在城市建设中起着至关重要的作用。随着桥梁使用年限的不断增长,桥梁的安全问题已经成为全球关注的焦点。因此,如何在桥梁使用过程中监测其安全性,及时发现并解决潜在的问题,成为了当前桥梁工程领域研究的重要方向。振......
  • 工业物联网解决方案:起重机运维可视化管理平台
    起重机在建筑工地、矿山、铁路、码头等场景都有应用,在货物装卸、搬运作业中扮演着重要角色。由于起重机操作复杂和受现场环境影响大等问题,往往可能出现安全隐患,对现场工作和人员安全造成威胁。为保证起重机的安全稳定运行,运维可视化管理平台应运而生。数之能提供的起重机运维可视化......
  • Spack:软件包管理的终极解决方案 以 unzip 无sudo权限安装为例
    Spack是一个高度可配置的软件包管理工具,旨在支持各种软件栈的安装和管理。尽管最初是为高性能计算设计的,但Spack的灵活性和扩展性使其也能在多种计算环境中派上用场,包括个人电脑和云基础设施。初始化和配置在Ubuntu下的安装和配置克隆Spack仓库使用以下命令从GitHu......
  • 金蝶云星空-新建解决方案 (本地开发,集成环境)
    vs2019,管理员身份打开,创建空解决方案,添加解决方案文件夹【App,Business】。新建类库,.net4.6.完成如下: 修改类库的生成路径为本地金蝶环境的路径:C:\ProgramFiles(x86)\Kingdee\K3Cloud\WebSite\bin   查看生成日志 也可以直接去路径下查看。 ......
  • DBeaver 使用中遇到驱动的问题并解决方案--mysql
    一、DBeaver的下载二、DBeaver的安装1、双击下载的EXE安装包,按提示选择目录进行安装即可三、DBeaver的配置1、第一次启动时会有一个弹窗,意思是添加一个连接数据库的模板,可以选择否2、点击窗口-首选项-连接-驱动-Maven,点击添加,增加仓库源地址(阿里云:https://maven.aliyun.com/......
  • 从编程语言的角度来理解正则表达式
    程序代码是对现实事物处理逻辑的抽象,而正则表达式,则是对复杂的字符匹配程序代码的进一步抽象;也就是说,高度简洁的正则表达式,可以认为其背后所对应的,是字符匹配程序代码,而字符匹配程序代码,背后对应的是字符匹配处理逻辑。字符匹配处理逻辑,可以抽象为字符匹配程序代码;字符匹配程序代码......
  • 缓存穿透、缓存击穿、缓存雪崩区别和解决方案
    一、缓存处理流程   前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。 ......
  • 高并发解决方案
    ......
  • 应用案例 | 基于三维机器视觉的机器人麻袋拆垛应用解决方案
    Part.1 项目背景在现代物流和制造行业中,麻袋的拆垛操作是一个重要且频繁的任务。传统的麻袋拆垛工作通常由人工完成,分拣效率较低,人力成本较高,现场麻袋堆叠、变形严重,垛型不规则、不固定,严重影响分拣效率。基于三维机器视觉的机器人麻袋拆垛解决方案通过机器人搭配三维机器视觉系统......
  • Runecast Analyzer 6.7 (VMware, AWS, Azure, Kubernetes) - 安全与合规性解决方案
    RunecastAnalyzer6.7(VMware,AWS,Azure,Kubernetes)-安全与合规性解决方案SecureandCompliantWorkloadsAnywhere请访问原文链接:https://sysin.org/blog/runecast/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org随时随地安全且合规的工作负载针对VMwar......