加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式简单用法

发布时间:2020-12-14 04:35:23 所属栏目:百科 来源:网络整理
导读:1. 正则语法 1.1 基本元字符 元字符 含义 . 匹配除换行符以外的任意字符 w 匹配字母或数字或下划线或汉字 s 匹配任意空白符 (Space Tab) d 匹配数字 ^ 匹配字符串的开头 $ 匹配字符串的结尾 1.2 重复 元字符 含义 * 零次或更多次 + 一次或更多次 ? 零次

1. 正则语法

1.1 基本元字符

元字符 含义
. 匹配除换行符以外的任意字符
w 匹配字母或数字或下划线或汉字
s 匹配任意空白符 (Space Tab)
d 匹配数字
^ 匹配字符串的开头
$ 匹配字符串的结尾

1.2 重复

元字符 含义
* 零次或更多次
+ 一次或更多次
? 零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

1.3 字符集合

当查找字母,数字,空白时,直接使用元字符即可。但如果要匹配特定的字符集,这时就需要字符集合

[afox] 匹配afox中任意一个字符
[^afo] 不匹配afo中的任意一个字符
[a-c0-2] 等价于 [abc012]

1.4 分支

类似于C++中的a || b 表达式,ab 任意一个为真,则表达式为真。

0d{3}|1d{2} 匹配以0开头的四个数字 或者 以1开头的3个数字。 |用来表示分支操作。

1.5 分组

分组用于重复匹配。比如IP地址192.168.4.2,简单的正则表达式:d{1,3}.d{1,3}。可见表达式中重复出现d{1,3}.,此时可以采用分组。(d{1,3}.){3}d{1,3}

说白了,就是重构。提取重复代码,构造一个公共函数,进行调用。

1.6 反义

不匹配特定字符。

元字符 含义
W 匹配任意不是字母,数字,下划线,汉字的字符
S 匹配任意非空白字符
D 匹配任意非数字的字符
B 匹配任意不是单词开头或结束的位置
[^a] 匹配除a以外的任意字符

1.7 后向引用

后向引用: 正则表达式前面匹配一个字符串,在表示的后面部分进一步处理。表达式前面的匹配称为捕获,使用小括号。

the the
---------------------------------------
grep -P "b(w+)bs+1b" --color text
the the

捕获: ()通过添加小括号,对数据进行捕获。
引用: 1引用捕获的内容, 1表示第一个小括号捕获的内容,如果有多个捕获,从左到右依次编号。

1.8 零宽断言

用于查找某些内容(但不包含这些内容)之前或者之后的内容。比如singing, 匹配ing之前的内容sing。

表达式 含义
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
singing
singingd
-------------------------------------
grep -P "bw+(?=ingb)" --color text
singing

1.9 贪婪与懒惰

正则表达式很勤快,也称为贪婪,总是最长匹配。例如:a.*b 会匹配字符串axbxxxb。但如果只想匹配axb,这时需要懒惰匹配,表达式a.*?b

表达式 含义
*? 重复任意次,但尽可能少
+? 重复1次或更多次,但尽可能少
?? 重复0次或1次,但尽可能少
{n,m}? 重复n到m次,但尽可能少
{n,}? 重复n次以上,但尽可能少

2. 正则历史

2.1 PCRE 与 POSIX

2.1.1 PCRE 与 POSIX 区别

正则语法 中所描述的各种使用范例,都是PCRE(Perl Compatible Regular Expressions)流派的使用方法。而在Unix/Linux 世界中,还存在另一流派,即POSIX规范。

区别
- POSIX 不支持懒惰匹配
- POSIX 不支持d,D,s,S,w,W
- POSIX 不支持零宽断言

字符组
POSIX虽然不支持d,s等元字符,但其引入字符组概念。

  • [:digit:] 匹配数字,等同d
  • [:alpha:] 匹配字母,等同[a-zA-z]
  • [:lower:] 匹配小写,等同[a-z]
  • [:upper:] 匹配大写,等同[A-Z]
  • [:space:] 匹配空白,等同s

栗子

234 匹配以数字2开头的三个数字
grep -E "2[[:digit:]]{2}" --color text

2e 匹配以数字2开头的非数字
grep -E "2[^[:digit:]]" --color text 

后向引用, 匹配 the the
grep  "b([a-z]+)bs+1" --color text

NOTE: 参照http://www.greenend.org.uk/rjk/tech/regexp.html

2.1.2 BRE 与 ERE 区别

POSIX 正则,又分为BRE(Basic Regular Expressions 与 ERE(Extended Regular Expressions)两个流派。

  • BRE元字符 ?+{|() 丢失特殊含义,成为普通字符。使用其特殊含义,需要进行转义,即?+{|()

  • BRE不支持分支。

NOTE: Grep 有4个参数,-G 代表BRE,-E 代表ERE, -F 代表PCRE, -F 普通文本。

2.2 VIM Magic

VIM Magic 设计初衷:更容易的构造正则表达式。支持pcre的元字符dsw等。但却没有给+(){}赋予特殊含义。这样Vim Magic模式既有PCRE语法,又有POSIX语法,导致字符转义规则比较混乱。

v 除下划线,大小写字母,数字外,全为特殊字符
V 只有有特殊含义

case
---------------------
  2x23
  2x7{2}
  2.7{2}

Magic 模式
---------------------
2.d{2}$  匹配 2x7{2}

v 模式
---------------------
2.d{2}$  匹配 2x23

V 模式
---------------------
2.d{2}$  匹配 2.7{2}

NOTE:
① 使用vim时,显示使用vV,避免magic模式的模糊不清。
② vim 中,单词界定符为&;,&;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读