正则表达式

元字符

元字符是表示具有固定含义的字符,每个元字符可替代一个字符。

- .        匹配除了换行符之外的全部字符
- \w       匹配字母或数字或下划线
- \s       匹配任意的空白符,空白符指空格,制表符等
- \d       匹配数字
- \n       匹配换行符
- \t       匹配制表符

- ^        匹配字符串的开始
- $        匹配字符串的结尾

- \W       \w的反义,匹配除了字母、数字、下划线的其他字符
- \D       \d的反义,匹配除数字外的其他字符
- \S       \s的反义,匹配不是空白符的字符

- a|b      或运算,匹配字符a或字符b
- ()       组,括号内的表达式作为一个组

- [...]    匹配到中括号内的任意字符即为匹配,如果匹配顺序字母或顺序数字的字符,可以使用省略写法:
           如:匹配小写字母 `[a-z]`,表示匹配 a 至 z 之间(包含自身)的全部字符,大写字母,数字的写法类似。
- [^...]   上述的反义,没有匹配到中括号内的字符即为匹配,^必须是在首位。

量词

量词跟在元字符之后,表示控制前面的元字符必须或允许匹配的次数。

- *       元字符可匹配0次或无限次
- +       元字符至少需要匹配1次,无上限
- ?       元字符可匹配0次或1次
- {n}     元字符需要匹配n次
- {n,}    元字符需要至少匹配n次,无上限
- {n,m}   元字符需要至少匹配n次,至多匹配m次

贪婪匹配和惰性匹配

- .*      匹配所有,贪婪匹配,在符合表达式的前提下(假设有多个符合结果),会得到最多匹配字符的那个结果
- .*?     匹配所有,惰性匹配,在符合表达式的前提下(假设有多个符合结果),会得到最少匹配字符的那个结果

特殊用法

^$           匹配空行,这一行中没有任何内容(只有空格也算内容)
             一般情况下,需求是排除空行,使用 `grep -v '^$' <文件名>` 命令排除内容中的空行。
             
\            转义字符(不是正则的内容,但是在正则中可以配合使用),
             例如匹配以`.`符号结尾的字符,那么使用`grep '.$' <文件名>` 命令会将所有非空行的结尾都匹配上,
             那么就需要转义字符配合,将例子中的 `.` 符号转义为普通字符:`grep '\.$' <文件名>`。

[a-zA-Z0-9]  匹配字母或数字,也可以使用 [a-Z0-9]。

[a-z|A-Z]    匹配字母和|,在 [] 中,字符都被当作普通字符使用