正则表达式你了解多少

正则表达式你了解多少

  • 引言
    • 何为正则表达式
    • 正则表达式的应用
    • 正则表达式的语法
    • 学习工具推荐

引言

相信不少小伙伴在实际项目开发中经常会遇到正则表达式的应用,但我们或许当时并没有深究,只是囫囵吞枣地从网上看一点就直接上代码了,等到下次再需要时,又得去百度一波,所以我觉得有必要做下笔记,以备不时之需。

何为正则表达式

这里我们先给正则表达式下个定义

正则表达式(Regular Expression)是使用单个字符串来描述、匹配一系列符合某个 语法规则的字符串
【说简单:就是按照某种规则去匹配符合条件的字符串】

举个例子

^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$
猜猜这个正则表达式代表啥?

正则表达式你了解多少_第1张图片

结果是邮箱(你有猜到么,其实我们可以用这个正则来进行表单校验,来判定用户输入的邮箱是否合法)

正则表达式的应用

也许你会问这个东西在哪些地方会派上用场呢?这里我说下我的见解:

  1. Linux下文件的查找,你有用上过正则表达式么;
  2. 目前各种IDE中几乎都支持使用正则进行查找、替换,你有试过Ctrl+F么;
  3. 再说各种编程语言它们难道不支持正则么;

你会别人不会,这便是你的优势

正则表达式的语法

这里示例采用JavaScript编写
1.元字符

正则表达式由两种基本的字符类型组成:

  • 原义文本字符【代表其本义的字符】
  • 元字符【在正则表达式式中有特殊含义的非字母字符,如: * + ? $ ^ . | \ () {} []】
字符 含义
\t 水平制表符
\v 垂直制表符
\n 换行符
\r 回车符
\0 空字符
\f 换页符
\cX 与X对应的控制字符(Ctrl+X)

2.字符类与范围类
一般来说,正则表达式的一个表达式对应字符串的一个字符如:
表示式:abC\t\v的含义在这里插入图片描述

但有时我们希望匹配一类字符,这时我们可以使用 []来构建一个字符类
如[abc]表示:
正则表达式你了解多少_第2张图片
使用[a-zA-Z]表示
正则表达式你了解多少_第3张图片
使用[^a-zA-Z]表示反向类:
正则表达式你了解多少_第4张图片

3.预定义类

字符 等价类 含义
. [^\n\r] 匹配除回车换行之外的所有字符
\d [0-9] 数字字符
\D [^0-9] 非数字字符
\s [\t\n\x0B\f\r] 空白字符
\S [^\t\n\x0B\f\r] 非空白字符
\w [a-zA-Z_0-9] 单词字符(字母,数字,下划线)
\W [^a-zA-Z_0-9] 非单词字符

4.边界

字符 含义
^ 以xxx开始
$ 以xxx结束
\b 单词边界
\B 非单词边界

5.量词

字符 含义
出现零次或一次(最多一次)
+ 出现一次或多次 (至少一次)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n~m次
{n,} 至少出现一次

6.两种“模式”

  • 贪婪模式:尽可能多的匹配(默认模式)

用\d{3,6}匹配字符串12345678
在这里插入图片描述

  • 非贪婪模式:尽可能少的匹配【在量词后加上即可】

同样用\d{3,6}匹配字符串12345678
在这里插入图片描述

7.分组

正则采用()进行分组,同时采用$标号反向引用分组,看个例子理解一波
在这里插入图片描述
附:
1、分组可与或结合(a|b)
2、分组可与量词结合(group){n,m}
3、忽略分组(?:group)即这个分组将不能再被引用

8.前瞻与后顾

正则匹配从左至右进行,所谓的前瞻就是向右看看,后顾就是向左看看

名称 正则
正向前瞻 exp(?=assert)
负向前瞻 exp(?!assert)
正向后顾 exp(?<=assert)
负向后顾 exp(?

学习工具推荐

为了让你更好地学习好正则,这里给你推荐一款在线学习工具

你可能感兴趣的:(关于正则)