正则表达式
总结正则表达式的规则和使用方法。
正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作,其中最为重要作用是匹配。
✏️ 正则表达式与通配符
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。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}
n
和m
均为非负整数,前者至少匹配n
次,后者至多匹配m
次。“o{2}”
不能匹配“Bob”
中的“o”
,但是能匹配“foooood”
中的所有“o”
。“o{1,}”
等价于“o+”
,“o{0,}”
等价于“o*”
。
{n,m}
m
和n
均为非负整数,其中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