正则表达式

总结正则表达式的规则和使用方法。

正则表达式是用于描述字符排列匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作,其中最为重要作用是匹配

✏️ 正则表达式与通配符

正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配grep、awk、sed等命令可以支持正则表达式。

正则表达式是包含匹配,即文件中的语句中包含了查找的字符串,那么就显示整行语句。

通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。

通配符必须是完全匹配,如find . -name “abc?” 查找到4个字符的文件名其中前三个字符是abc,列出的abcd、abce等文件。

✏️ 元字符

正则表达式包含了普通字符(A-Za-z0-9)、特殊字符(元字符)列表及它们在正则表达式中的行为。其中,如果要匹配特殊字符,需要用\转义,即:匹配+,用\+。在Linux中,正则表达式可以分为基本正则表达式扩展正则表达式

🖌️ 1、元字符总结

元字符

作用

^

匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。要匹配“^”字符本身,使用转义符转义“\^”

$

匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性,则“$”也匹配‘\r’‘\n’。要匹配“$”字符本身,使用转义符“\$”

.

匹配除“\r\n”之外的任何单个字符。

\

将下一个字符标记为特殊字符、原义字符、向后引用、八进制转义符。例如,‘n’匹配字符“n”‘\n’匹配换行符。‘\\’匹配“\”,而‘\(’匹配“(”

*

匹配前一个字符0次或任意多次,匹配前一个字符0次则表示可以匹配任意字符,包括空白行。

[ ]

字符匹配。匹配所包含的任意一个字符。

[^]

赋值字符集合。匹配未包含的任意一个字符。

[c1-c2]

字符范围。匹配指定范围内的任意一个字符。例如,“[a-z]”可以匹配“a”“z”范围内的任意一个小写字符字符。注意:只有连字符(-)在字符组内部,并且出现在两个字符之间时,才能表示字符的范围;如果出现在字符组的开头,则只能表示连字符本身。

{n}

n是一个非负整数,匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个“o”

{n,}{,m}

nm均为非负整数,前者至少匹配n次,后者至多匹配m次。“o{2}”不能匹配“Bob”中的“o”,但是能匹配“foooood”中的所有“o”“o{1,}”等价于“o+”“o{0,}”等价于“o*”

{n,m}

mn均为非负整数,其中n<=m,最少匹配n次且最多匹配m次。

🖌️ 2、扩展正则表达式元字符总结

元字符

作用

+

重复一次或一次以上的前一个字符。执行“egrep -n 'wo+d' test.txt”命令,即可查询“wood”“woood”“woooood”等字符串。

?

匹配零次或一次前一个字符。等效于 {0,1}。 当 ? 紧随任何其他限定符(* 、+、?、{n}、{n,} 或 {n,m})之后时,匹配模式是非贪婪的。 非贪婪模式匹配搜索到的、尽可能少的字符串,而默认的贪婪模式匹配搜索到的、尽可能多的字符串。

执行“egrep -n 'bes?t' test.txt”命令,即可查询“bet” “best”这两个字符串。

|

使用或(or)的方式匹配多个字符。执行“egrep -n 'of|is|on' test.txt”命令,即可查询“of” “is” “on”这两个字符串。

()

查找“组”字符串。执行“egrep -n 't(a|e)st' test.txt”命令,即可查询“tast” “test”这两个字符串。

()+

匹配多个重复的组。执行“egrep -n 'A(xyz)+C' test.txt”命令,查询开头是“A”,结尾是“C”,中间有一个以上的“xyz”的字符串。

🖌️ 3、非打印字符

非打印字符

匹配

等效于

\f

换页符。

\x0c 和 \cL

\n

换行符。

\x0a 和 \cJ

\r

回车符。

\x0d 和 \cM

\s

任何空白字符。 其中包括空格、制表符和换页符。

[ \f\n\r\t\v]

\S

任何非空白字符。

[^ \f\n\r\t\v]

\v

垂直制表符。

\x0b 和 \cK

🖌️ 4、多字符

多字符

功能

示例

\b

与一个字边界匹配;即字与非字之间的位置。

er\b 与“never”中的“er”匹配,但与“verb”中的“er”不匹配。

\B

非边界字匹配,即非字与字之间的位置。

er\B 与“verb”中的“er”匹配,但与“never”中的“er”不匹配。

\d

数字字符匹配,等效于 [0-9]。

在搜索字符串“12345”中,\d{2} 与“12”和“34”匹配。 \d 与“1”、“2”、“3”、“4”和“5”匹配。

\D

非数字字符匹配。 等效于 [^0-9]。

\D+ 与“abc123 def”中的“abc”和“def”匹配。

\a

英文字母,等效于[a-zA-Z]。

\a{3} 与 “abc123” 中的“abc”匹配。

\w

与以下任意字符匹配:A-Z、a-z、0-9 和下划线。 等效于 [A-Za-z0-9_]。

在搜索字符串“The quick brown fox…”中,\w+ 与“The”、“quick”、“brown”和“fox”匹配。

\W

与除 A-Z、a-z、0-9 和下划线以外的任意字符匹配。 等效于 。

在搜索字符串“The quick brown fox…”中,\W+ 与“…”和所有空格匹配。

Last updated