全网最易懂的正则表达式教程(7)- 环视

简介: 全网最易懂的正则表达式教程(7)- 环视

正则详细教程系列可以看此链接的文章哦

https://www.cnblogs.com/poloyy/category/1796055.html

 

前言


  • 环视:可以理解成看看左边,再看看右边
  • 在正则中我们有时候也需要瞻前顾后,找准定位
  • 环视就是要求匹配部分的前面或后面要满足(或不满足)某种规则
  • 有些地方也称环视为零宽断言
  • 环视其实也是断言的一种方式

 

什么时候用环视?


通过一个栗子来讲解

 

需求

邮政编码的规则是第一位是 1-9,一共有 6 位数字组成。现在要求你写出一个正则,提取文本中的邮政编码

 

最朴实的正则

[1-9]\d{5}

 

测试

测试文本 结果
012300 不满足第一位是 1-9
130400  满足要求
465441  满足要求
4654000  长度过长
138001380002 长度过长


image.png

可以发现:

7 位数的前 6 位也能匹配上,12 位数匹配上了两次,这显然是不符合要求的,它们并不是正常的邮政编码

所以,除了 6 位数的规则外,这 6 位数左边或右边都不能是数字

 

环视解决问题

image.png

记忆口诀

<看左边,没有<看右边,感叹号是非的意思

 

通过环视来写邮编的正则

(?<!\d)[1-9]\d{5}(?!\d)

这样就满足正常邮编的规则了

image.png


表示单词边界 \b 用环视的方式如何写?


  • (?<!\w) 表示左边不能是单词组成字符,
  • (?!\w) 右边不能是单词组成字符
  • 即  \b\w+\b  也可以写成  (?<!\w)\w+(?!\w)

 

但并不推荐这样写,直接用 \b 写不香吗

 

环视与分组


  • 环视和分组都有 ( )
  • 但环视只匹配位置,不匹配文本内容
  • 而分组是为了将匹配到的文本内容用于后续的操作
相关文章
|
7月前
|
关系型数据库 MySQL
MySQL 保姆级教程(七):用正则表达式进行搜索
MySQL 保姆级教程(七):用正则表达式进行搜索
|
7月前
|
数据采集 监控 Java
正则表达式教程:从入门到实战应用
正则表达式教程:从入门到实战应用
|
8月前
|
数据采集 监控 Java
正则表达式教程:从入门到实战应用
正则表达式教程:从入门到实战应用
|
9月前
|
Perl
Perl 教程 之 Perl 正则表达式 7
Perl教程讲解了其强大的正则表达式功能,用于字符串匹配、查找、替换和提取。示例展示如何使用`/s`删除变量`$string`中的重复字符,输出结果为原字符串。其他实例包括将非数字字符替换为空格,删除tab和空格,以及将数字间字符替换为单个空格。
71 3
|
9月前
|
Perl
Perl 教程 之 Perl 正则表达式 6
**Perl正则表达式强大多能,常用于字符串匹配、替换和提取。转化操作符如`tr`用于字符转换,如将所有小写字母转大写:`$string =~ tr/a-z/A-Z/`。**
62 2
|
9月前
|
Perl
Perl 教程 之 Perl 正则表达式 4
简洁概括:Perl正则表达式强大,s///操作符用于字符串替换,例子展示替换&quot;google&quot;为&quot;baidu&quot;。
51 1
|
9月前
|
Perl
Perl 教程 之 Perl 正则表达式 1
Perl教程介绍了其强大的正则表达式功能,用于字符串匹配、替换和转化。匹配用m//(可简写为//),替换用s///,转化用tr///,常与=~或!~配合判断匹配与否。示例展示了m//在匹配字符串中的应用。
50 0
|
9月前
|
Windows Perl
Perl 教程 之 Perl 正则表达式 8
Perl的正则表达式是其强项,常用于字符串匹配、查找、替换等。基本操作包括:`.`匹配任意字符(除换行符),`x?`匹配0或1次`x`,`x*`匹配0或多次`x`,`x+`匹配1或多次`x`。还有范围匹配如`[0-9]`、否定匹配`[^a-z]`、边界匹配`\b`等。特殊序列如`\d`代表数字,`\s`代表空格,`()`用于记忆匹配内容,`/pattern/i`忽略大小写。
190 0
|
9月前
|
存储 算法 Shell
【Shell 命令集合 文档编辑】Linux 正则表达式匹配 egrep命令使用教程
【Shell 命令集合 文档编辑】Linux 正则表达式匹配 egrep命令使用教程
110 0
|
9月前
|
Ruby