正则表达式
Shell脚本学习指南
- 概念
- Regular Expression 使用表达式在字符串中寻找匹配的内容
- BRE:Basic Regular Expression 基本正则表达式
- ERE:Extended Regular Expression 扩展正则表达式
元字符
字符 BRE/ERE 模式含义 \ BRE/ERE 关闭后续字符,例如\( \),\{ \} . BRE/ERE 任何单个字符,null除外 * BRE/ERE 匹配在它之前的0到多个字符 ^ BRE/ERE BRE:在表达式的开头表示行或字符串的起始;ERE:在任何位置均表示行或字符串的起始 $ BRE/ERE BRE:在表达式的结尾表示行或字符串的结束;ERE:在任何位置均表示行或字符串的结束 […] BRE/ERE 匹配方括号内的任一字符,可以用-表示,例如[0-9];如果第一个字符为^,则表示否定 \{n,m\} BRE \{n\}匹配n次;\{n,m\}匹配n到m次;\{n,\}至少匹配n次 \( \) BRE 后向引用 \n BRE 后向引用 {n,m} ERE 与BRE的\{\}一样 + ERE 匹配1到多次 ? ERE 匹配0到1次 | ERE 交替 [ abc | 123 | A4B ] ( ) ERE 匹配于方括号括起来的正则表达式群 方括号表达式
- 字符集
类别 匹配字符 [:alnum:] 数字字母 [:alpha:] 字母 [:blank:] 空格与tab [:cntrl:] 控制字符 [:digit:] 数字 [:graph:] 非空格 [:lower:] 小写字母 [:upper:] 大写字母 [:print:] 可显示字符 [:punct:] 标点符号 [:space:] 空格 [:xdigit:] 十六进制数字 - 排序符号
- [..]
- 将多字符序列视为一个单位
- 例如[.ch.],在匹配时不会匹配c和h,只匹配ch
- 等价字符集
- [==]
- 列出应视为等值的一组字符
- 例如[=e=],在法语环境中,匹配e é è ê ë
BRE
- 匹配单个字符
a => 匹配单个字符a abc => 匹配字符串abc \*\. => 匹配字符*.(因为*和.都是元字符,需要用\转义) a.b => 匹配abc,adc,a3c等 .* => 匹配0到多个任意字符 a[bc]d => 匹配abd,acd [0-9] => 匹配一个数字 [^0-9] => 匹配一个非数字
- 后向引用
\(ab\)\(cd\)[def]*\2\1 => 等同于abcd[def]*cdba #后向引用在寻找重复字以及匹配成对出现的符号时特别好用 \(["']\).*\1 => 用'和"括起来的字符
- 单个表达式匹配多个字符
\{n\} => 前面的表达式重复n次 \{n,\} => 前面的表达式重复至少n次 \{n,m\} => 前面的表达式重复n到m次
- 锚点
^ 行或字符串的起始 & 行或字符串的结尾 ^$ 空行
ERE
- 匹配单个字符
- 与BRE一致
- 后向引用不存在
- 匹配单个表达式与多个正则表达式
? 0个或1个 + 1个或多个
- 交替
[ 0-9 | a-z | A-Z ]
- 分组
(abc)+ => 匹配1个或多个连续的abc
- 匹配单个字符
额外扩展
运算符 含义 \w 等同于[[:alnum:]] \W 等同于[^[:alnum:]] \< 单词的起始 \> 单词的结尾 \b 单词的起始或结尾处找到的空字符串 \B 两个单词组成字符之间的空字符串