漫谈正则表达式

前端之家收集整理的这篇文章主要介绍了漫谈正则表达式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一 强大的文本处理工具grep

何为文本?

文本是一个文件,是一个ASCII格式的文件

ASCII是基于拉丁字母的一套电脑编码系统,是现今最通用的单字节编码系统;

grep则是一个文本搜索工具,应用于正则表达式中,根据用户指定的文本模式对目标文件

进行逐行搜索,从而显示出能够被模式所匹配到的行。


二 正则表达式

正则表达式是使用一类字符所书写出来的模式,去匹配符合这种模式的另一类字符串。


正则表达式分为:基本正则 和 拓展正则表达式


基本正则表达式标准格式 grep [option] "PATTERN" file

选项 模式内容 文件


选项 --color=auto 字体显色

例如 grep --color=auto "root" /etc/passwd

wKiom1MKGivRdignAACg5SJPNJM300.jpg

1 字符匹配

(1). 任意字符

wKioL1MKHBnBs9c0AADmrbsQxeI423.jpg

由于每次都需要输入选项 grep --color=auto 太麻烦,直接使用别名命令

将cgrep代替它。

-->匹配文件/etc/passwd 中的r..t 以r开头t结尾中间为两个任意字符的字符串

(2)[] 指定范围内任意单个字符

wKioL1MKHjyRqUxAAADCvkB1PAo412.jpg

-->匹配[Rr][Tt] 以大写R或者小写r开头 以大写T或者小写t结尾的字符串

(3)[a-z] 任意小写字母

wKioL1MKJfGQ4l-wAABXwBk-Ybc515.jpg

贪婪模式 尽可能多的匹配

(4)[A-Z] 任意大写字母

wKiom1MKJmzjiqnGAABKTVq7LCA215.jpg

贪婪模式 尽可能多的匹配

(5)[0-9] 任意数字

wKioL1MKKXKRhgd5AAE5ZnRN500379.jpg

(6)[^ ]指定范围外的任意字符

wKiom1MKLDvR5CVwAADjKQd4l6I367.jpg

指定除A字母外的其他字符串

2 特殊字符

[[:upper:]] 大写字母

[[:lower:]] 小写字母

[[:digit:]] 数字

[[:alnum:]] 字母和数字

[[:space:]] 空格符

[[:punct:]] 特殊字符(包含标点符号)

[[:alpha:]] 大写字母和小写字母

上图

[[:upper:]]

wKiom1MKLtfST19nAABSfoWJvLA067.jpg

匹配的全是大写字母

[[:lower:]]

wKioL1MKL97zj9IbAABrqXfHq0M712.jpg


匹配的是小写字母

[[:digit:]]

wKioL1MKML6Age-3AAE_cB1wX1E168.jpg

匹配的全是数字

[[:space:]]

wKiom1MKMrbQ3dO3AADSML_6riQ287.jpg

匹配到了空格

[[:punct:]]

wKiom1MKMyXDl6hlAAF8HITJau4235.jpg

匹配到的全是特殊符号

3 次数匹配

3.1 * 任意次数 (注意:是匹配*前边的字符任意次)

wKioL1MKNZSAuuGbAABtc_qQX0U252.jpg

3.2 .* 匹配任意长度的任意字符

wKiom1MKNnyzJeC_AADB-qvWKkc760.jpg

匹配到了a开头c结尾中间为任意长度的任意字符的字符串

3.3 \? 匹配0次或者1次

wKioL1MKN77CXev9AAA5srLpy4c912.jpg

注意最后一行,由于没有锚定词尾 所以会在贪婪模式下无休止的匹配出了y。

晚会聊聊词尾锚定

4 次数匹配之贪婪模式

\{m\} 匹配m次

\{m,n\} 匹配m到n次

\{m,\} 匹配至少m次

\{0,n} 匹配至多n次 请牢记格式和意义


5 位置锚定 用于指定字符出现的位置

^ 锚定行首

$ 锚定行尾

^$ 空白行

\< 锚定词首

\> 锚定词尾

5.1 ^

wKiom1MKOzXzl8XdAADxr6g7VAo475.jpg

匹配的以r为行首

5.2 $

wKioL1MKPXbxIRXsAAFc_iXoncQ181.jpg

匹配的都是以0结尾的字符串

5.3 ^$

wKioL1MKPlDSyjTLAANOcs0LX1I420.jpg

如果1111文件共一个空白行,根据^$匹配出的空白行数为1行(wc -l 统计行数)

5.4 \< \>

wKiom1MKQDPT9MrqAADfNOCxohg965.jpg

以a为词首的字符串

wKioL1MKQESD-Tn_AAGPdvePpE0512.jpg

以s为词尾的字符串


6 分组和引用

分组格式\(\)

例如:\(ab\)*xy

wKiom1MKQhyw7yBjAABZpz6l9a0444.jpg

以xy结尾前边可以为任意个ab,当然也包括0个ab,*是匹配任意次数还记得吗?


7 引用

\1 引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容

\2 引用前面的第二个左括号以及与之对应的有括号中的模式所匹配到的内容

...

\(a.b\)xy\1 如果匹配出来的是 a6bxya6b 这才是引用,将第一个括号中的所有内容引用


8 扩展正则表达式

格式 egrep "PATTERN" file...

egrep = grep -E

egrep 与 grep的用法区别

egrep 次数匹配

? 匹配其前面的字符0次或1次

+ 匹配其前面的字符0次或1次

{m} 匹配其前面的字符至少m次

{m,n}匹配其前面的字符m-n次

{m,}至少m次

{0,n}至多n次

你是否已经发现egrep次数匹配 与 grep次数匹配的格式相比较缺少了“\”

egrep 分组

分组格式 ()

请牢记grep的用法,注意grep与egrep的使用格式区别。



码的快整部开眼了,以上为仅自己的一点点总结,不足与不妥之处望指出

一滴水依然力量太小

原文链接:https://www.f2er.com/regex/362054.html

猜你在找的正则表达式相关文章