正则表达式是由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配功能。默认处于贪婪模式。
基础正则表达式
字符匹配:
.:表示任意单个字符(不能忽略)
[]:范围内的任意单个字符
字符集合:还要再用一个方括号引起来 就是两个方括号,必须加,不论是否是扩展正则表达式
[:digit:] | [1-9]:任何数字
[:lower:] | [a-z]:任何小写字母
[:upper:] | [A-Z]:任何大写字母
[:punct:]:任何标点符号
[:space:]:任何空白字符
[:alpha:]:任何字母
[:alnum:]:任何数字和字母
[^]:范围外的任意单个字符
匹配次数
*:匹配其前面的字符任意次
?:匹配其前面的字符1次或0次,需加上转义字符:\ 才能使用
+:匹配其前一个字符至少一次 ,基础正则表达式下需要用\
\{m\}:配置其前面的字符m次
\{m,n\}:对{}加了转义字符,不然bash会理解为其他意思 :命令展开,匹配其前面的字符至少m次,至多n次。n可以不用加 代表无限次
\{0,n\}:至多n次
\{m,\}:至少m次
位置锚定:
^: 锚定行首,此字符后面的任意内容必须出现在行首
$: 锚定行尾,此字符前面的任意内容必须出现在行尾
^$: 空白行
\<或\b:其后面的任意字符必须作为单词首部出现,锚定词首
\>或\b:其前面的任意字符必须作为单词尾部出现,锚定词尾
分组及引用:
\(\):将括号里面的字符当做一个整体
分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
\1
\2
\3
....
\(ab\)*:将ab当做一个整体,ab可以出现任意次
交换第一个和第二个字符
%s/ \(^.\)\(.\)/ \2\1/
交换第一个和最后一个字符
%s/ \(^.\)\(.*\)\(.$\)/ \3\2\1/
扩展正则表达式
字符匹配:
.:表示任意单个字符(不能忽略)
[]:范围内的任意单个字符
字符集合:还要再用一个方括号引起来 就是两个方括号,必须加,不论是否是扩展正则表达式
[:digit:] | [1-9]:任何数字
[:lower:] | [a-z]:任何小写字母
[:upper:] | [A-Z]:任何大写字母
[:punct:]:任何标点符号
[:space:]:任何空白字符
[:alpha:]:任何字母
[:alnum:]:任何数字和字母
[^]:范围外的任意单个字符
次数匹配:
*:匹配其前面的字符任意次
?:匹配其前面的字符1次或0次
+:匹配其前一个字符至少一次
{m}:配置其前面的字符m次
{m,n}:匹配其前面的字符至少m次,至多n次。n可以不用加 代表无限次
{0,n}:至多n次
{m,}:至少m次
位置锚定:
^: 锚定行首,此字符后面的任意内容必须出现在行首
$: 锚定行尾,此字符前面的任意内容必须出现在行尾
\<或\b:其后面的任意字符必须作为单词首部出现,锚定词首
\>或\b:其前面的任意字符必须作为单词尾部出现,锚定词尾
分组及引用:
():分组
或:
a|b:或者的意思 a或b