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

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

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}$

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

6.写在最后

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

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

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

时间: 2021-07-23

正则表达式\d元字符(相对于数字0-9)

正则表达式\d元字符: \d元字符可以匹配数字字符,等价于"[0-9]". 语法结构: 构造函数方式: new RegExp(\\d) 对象直接量方式: /\d/ 浏览器支持: IE浏览器支持此元字符. 火狐浏览器支持此元字符. 谷歌浏览器支持此元字符. 实例代码: 实例一: var str="I love antzone \n and you 360"; var reg=new RegExp("\\d","g"); cons

浅析正则表达式 元字符和普通字符

要想学会正则表达式,理解元字符和普通字符是一个必须攻克的难关.不用刻意记.下面小编给大家带来了正则表达式 元字符和普通字符的相关知识,一起看看吧. 根据正则表达式语法规则,正则表达式的匹配模式是由一系列的字符构成的. 一.普通字符: 大多数的字符仅能够描述它们本身,这些字符称作普通字符,例如所有的字母和数字. 也就是说普通字符只能够匹配字符串中与它们相同的字符. 二.元字符: 由于普通字符只能匹配与自身相同的字符,那么正则表达式的灵活性和强大的匹配功能就不能完全展现,于是正则表达式中规定了一系列

Python正则表达式和元字符详解

正则表达式 正则表达式是一种强大的字符串操作工具.它是一种领域特定语言 (DSL),不管是 Python 还是在大多数现代编程语言中都是作为库存在. 它们主要面向两种任务: - 验证字符串是否与模式匹配 (例如,字符串具有电子邮件地址的格式). - 在字符串中执行替换(例如将所有大写字母改成小写字母). 特定于领域的语言是高度专业化的迷你编程语言. 正则表达式是一个例子,SQL(用于数据库操作)是另一个例子. 私有领域特定语言通常用于特定的工业目的. Python 的正则表达式可以使用 re 模

详解正则表达式 \v 元字符

下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为: 字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个 向后引用.或一个八进制转义符.例如,'n' 匹配字符 "n".'\n' 匹配一个换行符.序列 '\\' 匹配 "\" 而 "\(" 则匹配 "(". ^ 匹配输入字符串的开始位置.如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置. $

正则表达式常用元字符整理小结

正则表达式元字符和普通字符: 根据正则表达式语法规则,正则表达式的匹配模式是由一系列的字符构成的. 一.普通字符: 大多数的字符仅能够描述它们本身,这些字符称作普通字符,例如所有的字母和数字. 也就是说普通字符只能够匹配字符串中与它们相同的字符. 二.元字符: 由于普通字符只能匹配与自身相同的字符,那么正则表达式的灵活性和强大的匹配功能就不能够完全展现,于是正则表达式中还规定了一系列的特殊字符,这些特殊字符不是按照字符的直接量进行匹配的,而是具有特殊的语义, 例如下面如下字符: ^ $ . *

正则表达式教程之元字符的使用详解

本文实例讲述了正则表达式教程之元字符的使用.分享给大家供大家参考,具体如下: 注:在所有例子中正则表达式匹配结果包含在源文本中的[和]之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明.所有java例子都在JDK1.6.0_13下测试通过. 一.对特殊字符进行转义 元字符是一些在正则表达式里有着特殊含义的字符.因为元字符在正则表达式里有着特殊的含义,所以这些字符就无法用来代表它们本身.在元字符前面加上一个反斜杠就可以对它进行转义,这样得到的转义序列将匹配那

正则表达式\w元字符使用介绍

正则表达式\w元字符: \w元字符用来匹配单词字符,它等价于"[a-zA-Z0-9]". 语法结构: 构造函数方式: new RegExp("\\w") 对象直接量方式: /\w/ 浏览器支持: IE浏览器支持此元字符. 火狐浏览器支持此元字符. 谷歌浏览器支持此元字符. 实例代码: 实例一: var str="antzone<12>love"; var reg=new RegExp("\\w","g&q

正则表达式\W元字符使用方法

正则表达式\W元字符: \W(大写)用来匹配非单词字符,它等价于"[^a-zA-Z0-9_]". 语法结构: 构造函数方式: new RegExp("\\W") 对象直接量方式: /\W/ 浏览器支持: IE浏览器支持此元字符. 火狐浏览器支持此元字符. 谷歌浏览器支持此元字符. 实例代码: 实例一: var str="antzone<12>love"; var reg=new RegExp("\\W","

详解Sed命令的用法与正则表达式元字符

sed命令用法 sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等. 1.简介 sed是非交互式的编辑器.它不会修改文件,除非使

linux 详解useradd 命令基本用法

linux 详解useradd 命令基本用法 概要: 在 Linux 中 useradd 是个很基本的命令,但是使用起来却很不直观.以至于在 Ubuntu 中居然添加了一个 adduser 命令来简化添加用户的操作.本文主要描述笔者在学习使用 useradd 命令时的一些测试结果. 说明:本文中的所有试验都是在 Ubuntu14.04 上完成. 功能 在Linux中 useradd 命令用来创建或更新用户信息. useradd 命令属于比较难用的命令 (low level utility for

详解Linux命令中的正则表达式

命令中的正则表达式 如果要在命令输出或文本中筛选内容时使用模糊查找,就需要使用正则表达式.正则表达式是一套由多个元字符组成的模糊查找模式,使用正则表达式可以快速查找和定位文本中指定的内容. 1.单字符匹配符.  正则表达式主要由一些元字符和匹配模式组成 单字符匹配符可以匹配任意单个字符,这个字符的功能和文件名匹配符中的?功能相同 使用正则表达式查找文本,首先需要使用元字符组成一个查找模式 (1)使用查找模式时,通常将其放入两个斜杠//中,然后再放入命令,例如要在一个文本中查找匹配模式/.i...

Node.js API详解之 dns模块用法实例分析

本文实例讲述了Node.js API详解之 dns模块用法.分享给大家供大家参考,具体如下: Node.js API详解之 dns dns (域名服务器)模块包含两类函数: 第一类函数,使用底层操作系统工具进行域名解析,且无需进行网络通信. 这类函数只有一个:dns.lookup(). 例子,查找 baidu.com: const dns = require('dns'); dns.lookup('www.baidu.com', (err, address, family) => { conso

详解Linux命令iostat

Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令来查看初步定位问题.在一个以前看到系统监控工具,总在想那些监控工具的代理,如何收集系统性能信息,io性能,cpu使用,带宽使用等信息,偶然发现,不同系统均提供有性能分析工具的,代理可通过这些命令获取系统性能信息,个人猜测,不知道具体是不是这样的.其中iostat可以给我们提供丰富的IO状态数据,下边就来看一下iostat如何使用,命令能够输出那些信息. 简述 Linux系统中通过iostat我们能查看

Node.js API详解之 V8模块用法实例分析

本文实例讲述了Node.js API详解之 V8模块用法.分享给大家供大家参考,具体如下: Node.js API详解之 V8 v8 模块暴露了特定于V8版本内置到 Node.js 二进制文件中的API. 通过以下方式使用: const v8 = require('v8'); 注意: APIs 和实现可能在任何时间变动. v8.cachedDataVersionTag() 说明: 返回一个表示从V8版本,命令行标志和已检测到的CPU功能派生的"version tag"的整数. 这对于判

Node.js API详解之 vm模块用法实例分析

本文实例讲述了Node.js API详解之 vm模块用法.分享给大家供大家参考,具体如下: Node.js API详解之 vm vm 模块提供了一系列 API 用于在 V8 虚拟机环境中编译和运行代码. JavaScript 代码可以被编译并立即运行,或编译.保存然后再运行. 常见的用法是在沙盒中运行代码.沙盒代码使用不同的V8上下文. const vm = require('vm'); const x = 1; const sandbox = { x: 2 }; vm.createContex

Node.js API详解之 assert模块用法实例分析

本文实例讲述了Node.js API详解之 assert模块用法.分享给大家供大家参考,具体如下: Node.js API详解之 assert assert 模块提供了断言测试的函数,用于测试不变式. 断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真, 可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言. 同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言. 使用断言可以创建更稳定.品质更好且不易于出错的代码. 当需要在一个值为

Node.js API详解之 module模块用法实例分析

本文实例讲述了Node.js API详解之 module模块用法.分享给大家供大家参考,具体如下: Node.js API详解之 module Node.js 有一个简单的模块加载系统. 在 Node.js 中,文件和模块是一一对应的(每个文件被视为一个独立的模块). 例子,假设有一个名为 foo.js 的文件: const circle = require('./circle.js'); console.log(`半径为 4 的圆的面积是 ${circle.area(4)}`); 在第一行中,

Node.js API详解之 repl模块用法实例分析

本文实例讲述了Node.js API详解之 repl模块用法.分享给大家供大家参考,具体如下: Node.js API详解之 repl repl(交互式解释器) 模块提供了一种"读取-求值-输出"循环(REPL)的实现,它可作为一个独立的程序或嵌入到其他应用中. 可以通过以下方式使用它: const repl = require('repl'); Node.js 自身也使用 repl 模块为执行 JavaScript 代码提供交互接口. 可以通过不带任何参数(或使用 -i 参数)地执行