返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >正则表达式那些让人头晕的元字符
  • 573
分享到

正则表达式那些让人头晕的元字符

2024-04-02 19:04:59 573人浏览 薄情痞子
摘要

目录0.写在前面1.特殊单字符2.空白符3.范围4.量词5.实战1.如何表达一个两位数字的范围2.如何表达一个三位数字的范围3.组合6.写在最后0.写在前面 在开发中,正则表达式常用

0.写在前面

开发中,正则表达式常用于邮箱、手机号的校验,文本的批量查找、替换等操作。

大部分同学,在拿到需求的时候,第一件事一定是打开浏览器,搜索:邮箱 正则表达式 怎么写,然后Ctrl C + V,测试几个条件没问题,就提交了,出了问题也不知道怎么修改,只能再求救热心网友。

本篇文章,主要带大家了解一下,正则表达式的基本用法,有个初步的了解,看到正则后不再一脸懵。

比如IPv4地址的正则表达式:


^([1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.(0|[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$

如果你没看过本篇文章,第一眼看到这个表达式一定有点头晕,乱七八糟写的是啥,别担心,学完后你就会发现,那些看似复杂的表达式,其实也不过如此。

本篇文章主要内容的思维导图,后续可用于快速查询:

思维导图

1.特殊单字符

在正则表达式中,普通字符表示的还是原来的意思,比如表达式 1 可以匹配到数字 1,表达式 a 可以匹配到字母 a

但是如果想要匹配到更多字符的时候,我们不可能把所有的字符都列一遍,这样就太浪费时间了,那有什么更好的办法呢,接下来就是元字符大显身手的时间了。

. 点号通配符,可以匹配到除换行外的任意字符:

点号通配符

\d 数字通配符,可以匹配到数字0-9

\D 如果将D大写,则匹配到的是任意非数字,相当于 \d 的反义

数字通配符

\w 字母数字下划线通配符,可以匹配到任意的字母数字下划线

\W 如果将W大写,则匹配到的是任意非字母数字下划线

字母数字下划线通配符

\s 空白符通配符,可以配到任意空白符,包括回车、换行、换页、制表符等

\S 如果将S大写,则匹配到的是任意非空白符

空白符通配符

到这里,特殊单字符就讲完了,汇总下:

特殊单字符

2.空白符

空白符分为下图中的几类,一般我们用 \s 表示就可以了:

空白符

3.范围

| 或,和你心中想的那个或是一样的,ab|bc 可以匹配到ab或者bc

[...] 多选一,比如 [abc] 可以匹配到字母a,也可以匹配到字母b或c

[a-z] 匹配a到z之间的任意元素,\w 这个通配符就可以用 【a-zA-Z0-9_】 来表示

[^...] 取反,不能是括号内的任意单个元素

注意:以上的表达式每次只能匹配到单个元素

范围

4.量词

* 星号,代表出现0到多次,可以出现,也可以不出现,出现的话,不限制次数

+ 加号,代表出现1到多次,也就是至少出现一次的意思

? 问号,代表出现0到1次,比如Http协议的正则就可以用 Https? 表示

{m} 代表出现m次,比如 a{1} 就表示匹配的规则中,字母a只能出现1次

{m,} 代表至少出现m次,{0,} 相当于星号,{1,} 相当于加号

{m,n} 代表出现m到n次,{0,1} 相当于问号

量词

5.实战

现在我们再回过头来,看下文章开头的正则表达式:


^([1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.(0|[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$

是不是觉得有点思路了,下面我们一起来实现下,先讲讲规则:

  • IPv4地址的范围,我们定义为 1.0.0.0 - 255.255.255.255,当然专业上肯定有更严格的定义划分,我们此处不纠结
  • 通过以上范围,我们可以得出基本规则 [1-255].[0-255].[0-255].[0-255]
  • 可以看出后三位是重复的 .[0-255],所以我们只需要先写出 [0-255] 的规则,后面就很简单了
  • ^$ 用于标识行的开始和结束,这个我们下一篇文章会讲到

开始吧:

1.如何表达一个两位数字的范围

通过上面的学习,我们知道一个数字可以用 \d[0-9] 来表示,如果要表达多位数呢,比如0-99。

可以这样拆分,0-99的范围,最少的位数是1位,最多的位数是2位,那我们可以用2个数字通配符来表示,为了清晰和美观,我们此处用 **[0-9]**表示。

写起来就是:


0|[1-9][0-9]?

其中,0 代表数字0,因为要排除 00 的情况,所以不能使用 [0-9][0-9]? 来表示,中间有个或 |,后面的 [1-9][0-9]? 表示1-99,还记得 ? 的含义吗,代表出现0到1次。

2.如何表达一个三位数字的范围

两位的写完了,三位的就很简单了,我们来写下0-255的范围。

这里要注意下:

  • 当数字达到3位的时候,百位只能是1或2
  • 当百位数字是2的时候,十位数字只能是0-5
  • 当十位数字是5的时候,个位数字只能是0-5

来写一下:


0|[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5]

0-255到范围写完了,去掉0就成了1-255的范围:


[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5]

3.组合

最后组合下,还记得 {3} 的含义吗,代表这个字符或组合出现3次:

注意:. 点号别忘了用 \ 转义下


^([1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.(0|[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$

大功告成,有没有豁然开朗的感觉,验证下:

IPv4

6.写在最后

到这里,正则表达式的基本用法就讲完了,如果有问题可以给我留言评论,谢谢。

正则表达式在线校验工具https://regex101.com/

到此这篇关于正则表达式那些让人头晕的元字符的文章就介绍到这了,更多相关正则表达式 元字符内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 正则表达式那些让人头晕的元字符

本文链接: https://lsjlt.com/news/131102.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 正则表达式那些让人头晕的元字符
    目录0.写在前面1.特殊单字符2.空白符3.范围4.量词5.实战1.如何表达一个两位数字的范围2.如何表达一个三位数字的范围3.组合6.写在最后0.写在前面 在开发中,正则表达式常用...
    99+
    2024-04-02
  • 正则表达式字符组/元字符/量词
    一.正则表达式能干什么   1.从大段的文字中找到符合规则的内容   2.判断某个字符串是否完全符合规则 二.字符组-- [] 写在中括号中的内容,都出现在下面的某一个字符的位置上都是符合规则的    [0-9] 匹配数字   [a-z]...
    99+
    2023-01-31
    字符 量词 正则表达式
  • PHP正则表达式整理之 元字符
    正则表达式的威力源于它可以在模式中拥有选择和重复的能力。 一些字符被赋予 特殊的涵义,使其不再单纯的代表自己,模式中的这种有特殊涵义的编码字符 称为 元字符。 共有两种不同的元字符:一种是可以在模式...
    99+
    2024-02-27
  • Python正则表达式的字符有哪些
    本篇内容主要讲解“Python正则表达式的字符有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python正则表达式的字符有哪些”吧!对于许多需要处理文本来说的技术工程师,必须对Python...
    99+
    2023-06-17
  • 正则表达式支持的字符有哪些
    这篇文章主要介绍了正则表达式支持的字符有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 一、匹配字符 字符类 ...
    99+
    2024-04-02
  • PHP正则表达式元字符的作用是什么
    本篇内容主要讲解“PHP正则表达式元字符的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP正则表达式元字符的作用是什么”吧!PHP正则表达式元字符的种类:◆大括号◆加号◆星号◆问号...
    99+
    2023-06-17
  • Java正则表达式API字符类
    目录一、Predefined字符类二、Quantifiers三、Capturing Groups一、Predefined字符类 Java正则表达式API也接受预定义的字符类。上面的一...
    99+
    2024-04-02
  • PHP正则表达式特殊字符有哪些
    小编给大家分享一下PHP正则表达式特殊字符有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!PHP正则表达式特殊字符"[ ]"和"\",那么他们是什么呢?具体的操作是什么呢?之所以...
    99+
    2023-06-17
  • Java字符串 正则表达式详解
    目录一、规则表1.字符2.字符类 .3.边界匹配符4.逻辑操作符5.量词二、Pattern类1.Pattern类的实例获取—compile方法2.split方法3.Pattern中匹...
    99+
    2024-04-02
  • 正则表达式字符集是什么
    这篇文章主要为大家展示了“正则表达式字符集是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“正则表达式字符集是什么”这篇文章吧。正则表达式字符集是由一对方括号“[]”括起来的正则表达式字符集合...
    99+
    2023-06-17
  • 正则表达式中非打印字符有哪些
    这篇文章将为大家详细讲解有关正则表达式中非打印字符有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。非打印字符有不少很有用的非打印字符,偶尔必须使用。下表显示了用来表示这些非打印字符的转义序列:字符含义...
    99+
    2023-06-09
  • 正则表达式操作符有哪些
    这篇文章主要介绍正则表达式操作符有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!常用匹配.(匹配任何单个字符。例如正则表达式r.t匹配这些字符串:rat、rut、r t,但是不匹配root)$(匹配行结束符。例如...
    99+
    2023-06-17
  • VBS正则表达式的特殊字符说明
    本篇内容主要讲解“VBS正则表达式的特殊字符说明”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“VBS正则表达式的特殊字符说明”吧!特殊字符有不少元字符在试图对其进行匹配时需要进行特殊的处理。要匹...
    99+
    2023-06-09
  • mysql字符串正则表达式及说明
    目录概述正则表达式运算符正则表达式语法概述 名称描述NOT REGEXP否定的REGEXPREGEXP字符串是否匹配正则表达式RLIKE字符串是否匹配正则表达式 正则表达式是指定复杂...
    99+
    2024-04-02
  • mysql 正则表达式 提取 指定字符
    目录 1.REGEXP 正则表达式2.REGEXP_REPLACE3.补充参考链接 1.REGEXP 正则表达式 # 查找字段中包含数字和字母的所有记录 SELECT 字段1 FROM 表1 where 字段1 R...
    99+
    2023-08-25
    mysql 正则表达式 数据库
  • Python正则表达式匹配字符串中的数字
    这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下1.使用“\d+”匹配全数字...
    99+
    2023-06-01
  • Flex正则表达式中普通字符和转义字符有哪些
    这篇文章主要介绍Flex正则表达式中普通字符和转义字符有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.Flex正则表达式规则一般来说各个开发环境或者语言对于正则表达式的实现不是完全一样的,但是差别都非常细微。...
    99+
    2023-06-17
  • JavaScript正则表达式的修饰符有哪些
    本篇内容主要讲解“JavaScript正则表达式的修饰符有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript正则表达式的修饰符有哪些”吧! ...
    99+
    2024-04-02
  • Python正则表达式修饰符有哪些
    今天小编给大家分享一下Python正则表达式修饰符有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。正则表达式对象re.R...
    99+
    2023-06-08
  • VBS正则表达式中普通字符的介绍
    本篇内容主要讲解“VBS正则表达式中普通字符的介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“VBS正则表达式中普通字符的介绍”吧!普通字符普通字符由所有那些未显式指定为元字符的打印和非打印字...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作