shell正则表达式

正则的意义

正则对于平时的开发工作是非常有意义的,如果不用正则有可能你需要复杂的逻辑去完成一个需求。然而,使用正则的时候经常会骂娘, 为什么骂娘? 无非两个原因: 一、看不懂了。二、忘记了规则实在写不出来。 其实,如果不是特别经常使用正则确实会忘的比较厉害。但是,如果你对正则进行一个深入的理解,是有助于长期记忆的。

正则表达式组成


如上图: 正则表达式有三部分组成: 字符、 数量限定符和位置限定符。掌握它的结构就非常容易看懂和写出正确的表达式。

字符

字 符 含 义 栗 子
. 匹配任意字符 G.CD 可以配 GACD, GbCD, 但不匹配 GCD
[ ] 匹配括号中的任意一个字符 [abc]d 匹配 ad, bd, cd
- 在[]内部使用,表示范围 [0-9], [a-zA-Z]
^ 括号内的开头,表示匹配除括号内的字符以外的任一字符; 不在括号内使用,标识匹配开头 [^wgc]匹配除 wgc 之外的任一字符

数量限定符

数量限定符 含义 栗子
? 匹配一次或者零次其前边的单元 [0-9].[0-9]? 匹配小数点后可以有一个或0个0-9的数字
+ 匹配一次或多次其前边的单元 wgc@[a-zA-Z]+匹配 wgc@之后有一个或多个字母
* 匹配零次或多次其前边的单元 [0-9]* 匹配至少一位数字
{N} 匹配 N 次其前边的单元 [1-9][0-9]{2} 匹配100~999的三位数
{N, } 匹配至少 N 次其前边的单元
{, N} 匹配最多 N 次其前边的单元
{N, M} 匹配最少 N 次,最多 M 次其前边的单元

位置限定符

位置限定符 含义 栗子
^ 匹配行守位置 ^Android 匹配行首为 Android
$ 匹配行尾位置 Android$ 匹配已 Android 结尾
\< 匹配单个词开头的位置 \<wgc 匹配 wgcabcd 但是不匹配 wg cabcd
\> 匹配单个词结尾的位置 wgc>
\b 匹配单个词开头或结尾的位置 \bwgc\b 匹配 wgc 但不匹配 wgcisok
\B 匹配非单词开头或者结尾的位置 \Bwgc\B 匹配 abcwgcab 不匹配 wgcab

特殊字符串

特殊字符 含义 栗子
\ 转义字符
() 将正则表达式的一部分括起来组成一个单元,可以对整个单元使用数量限定符 ([0-9]{1,3}.){3}[0-9]{1,3}匹配 ip 地址
逻辑或
s 空白字符:[ \t\n\x0B\f\r] 常用
\t 制表符 (‘\u0009’)
\n 新行(换行)符 (‘\u000A’)
\r 回车符 (‘\u000D’)
\f 换页符 (‘\u000C’)
\a 报警 (bell) 符 (‘\u0007’)
\e 转义符 (‘\u001B’)
\cx 对应于 x 的控制符