正则常见问题及解决方案

这篇具有很好参考价值的文章主要介绍了正则常见问题及解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

如果是要查找的内容中不能出现某些字符,这种情况比较简单,可以通过使用中括号来排除字符组,比如非元音字母可以使用 [^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>来进行匹配。在提取引号里面的内容时,可以使用 [^"]+,方括号里面的内容时,可以使用 [^>]+ 等方式

此文章为8月Day29学习笔记,内容来源于极客时间《正则表达式入门课》,推荐该课程。文章来源地址https://www.toymoban.com/news/detail-683068.html

到了这里,关于正则常见问题及解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RabbitMQ详解与常见问题解决方案

    RabbitMQ 是一个开源的消息中间件,使用 Erlang 语言开发。这种语言天生非常适合分布式场景,RabbitMQ 也就非常适用于在分布式应用程序之间传递消息。RabbitMQ 有非常多显著的特点: 消息传递模式 :RabbitMQ 支持多种消息传递模式,包括发布/订阅、点对点和工作队列等,使其更

    2024年03月15日
    浏览(67)
  • vlc option以及常见问题解决方案

    2024年02月08日
    浏览(252)
  • 常见后端数据存储问题解决方案

    1、mysql数据准确性        常见电商系统中,如订单服务、现金券服务、活动类服务等,这类服务中经常会出现一些并发更新数据的情况,如何保证数据准确性。虽然有些操作可通过\\\"状态\\\"字段做了类似乐观锁的处理。但理论上还是会出现ABA的问题,而且规则不够统一,不同

    2023年04月18日
    浏览(35)
  • SpringBoot —— 整合RabbitMQ常见问题及解决方案

    企业中最常用的消息中间件既不是RocketMQ,也不是Kafka,而是RabbitMQ。 RocketMQ很强大,但主要是阿里推广自己的云产品而开源出来的一款消息队列,其实中小企业用RocketMQ的没有想象中那么多。 至于Kafka,主要还是用在大数据和日志采集方面,除了一些公司有特定的需求会使用

    2023年04月12日
    浏览(83)
  • HBase实际应用中常见的问题 解决方案

    HBase 是一个分布式的、面向列的开源数据库,通常用于处理大规模数据。在实际应用中,可能会遇到一些常见问题,以下是一些常见问题及其解决方案: 性能问题 : 问题 :HBase 性能下降,读写延迟增加。 解决方案 :可以通过增加 Region Server、优化 HDFS、调整 HBase 配置参数

    2024年01月19日
    浏览(38)
  • 微信小程序:小程序常见问题及解决方案

    在小程序中使用原生的表单组件时,在有弹出框出现的情况下,原生表单组件会出现在遮罩层上面,且会造成事件穿透的情况。 解决方案一: 使用cover-view,cover-view比原生组件的层级更高,或者说也是一种原生组件,不过在cover-view的子组件只能是coveri-view、cover-image,对于包

    2024年02月10日
    浏览(67)
  • BurpSuite【安装配置、使用细节、常见问题解决方案等】

    问题描述 使用某博客所述方法安装BurpSuite后,当天使用正常,但过几天后发现无法打开。 可能原因 JAVA安装路径下的文件夹名(父级文件夹)被修改过,但是系统环境变量中的路径值没有相应修改。 解决方案 检查系统环境变量中JAVA_HOME和Path的路径值(根据个人安装时的配置

    2024年02月11日
    浏览(37)
  • 【大数据安全-Kerberos】Kerberos常见问题及解决方案

    可以用来帮助诊断 Kerberos 相关问题的原因并实施解决方案的指南。 javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)] 此消息表明一个操作尝试要求以 Kerberos 的 user/host@realm 身份认证的操作,但票据 cac

    2024年02月05日
    浏览(49)
  • 运行 `npm install` 时的常见问题与解决方案

    描述: 运行 npm install 时,可能会遇到网络连接问题,导致无法正常下载依赖包。 报错示例: npm ERR! network connection timed out npm ERR! connect ETIMEDOUT npm ERR! getaddrinfo EAI_AGAIN 解决方案: 确保你的计算机已连接到互联网。可以尝试打开浏览器,访问其他网页来确认网络连接正常。 检

    2024年02月07日
    浏览(60)
  • 在Mac上安装SQLsever,常见问题及解决方案

    前言: 最近入手了新的Mac M2 arm 框架的 苹果电脑,公司新项目采用SQLsever2019版本,在Mac上安装SQLsever千难万阻,查阅很多资料最后寻求的解决方案,记录如下,供大家参考。 说下大致的安装步骤和里面踩的坑, 通篇阅读后再动手 首先Mac想要安装SQLsever,通过docker去拉去镜像

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包