Linux中的正则表达式
POSIX1 定义了两种正则表达式语法:
1) BRE 基本正则表达式(Basic Regular Expression);
2) ERE 扩展的正则表达式(Extended Regular Expression)
大多数的Linux程序符合BRE规则
sed 只支持大部分 BRE, 因为主要是受到速度的限制;
grep 可以支持 ERE, 只是需要增加额外参数 -E
gwak 使用 BRE
Regular Expression 中的基本字符集
BRE定义语法符号
| 符号 | 模式含义 |
|---|---|
| . | 匹配任何一个字符 |
| [] | 字符集匹配 |
| [^] | 字符集(取反)匹配 |
| ^ | 匹配开始位置 |
| $ | 匹配结束位置 |
| () | 定义子表达式 |
| \n | 子表达式向前引用, 即表示重复, n在{1,9}之间 |
| * | 多次或者重复匹配(包括0次重复) |
| \ | 转义符 |
| [] | 匹配括号内出现的字符, 如 [a-zA-Z0123] |
| p{n} | 匹配p出现n次 |
| p{n,} | 匹配p至少出现n次 |
| p{n,m} | 匹配所有p出现的次数大于n小于m的情况 |
ERE修改的语法符号
| 符号 | 状态 | 模式含义 |
|---|---|---|
| ? | 新增 | 多次匹配(包括0次) |
| + | 新增 | 至少一次匹配 |
| 新增 | 或运算, 匹配两个子表达式的合集 | ||
| () /{m,n} | 修改 | 注释: 不需要转义 (, ), {, } 这些符号 |
| \n | 取消 | …… |
BRE 和 ERE 共享, 额外的一些定义:
特殊符号:
表一:
| POSIX类 | perl类 | 描述 |
|---|---|---|
| [:alnum:] | 数字集+字母集 | |
| [:alpha:] | \a | 字母集 |
| [:lower:] | \l | 小写字母集 |
| [:upper:] | \u | 大写字母集 |
| [:blank:] | 空白字符集(空格+制表符) | |
| [:space:] | \s | 所有空白字符(包括[:blank:]) |
| [:cntrl:] | 不可打印的控制字符集(退格, 删除….) | |
| [:digit:] | \d | 十进制数字 |
| [:xdigit:] | \x | 十六进制数字 |
| [:graph:] | 可打印的非空白字符 | |
| [:print:] | \p | 可打印的字符 |
| [:pumct:] | 标点符号 |
表二:
| perl类 | 等效POSIX | 描述 |
|---|---|---|
| \o | [0-7] | 八进制数字 |
| \O | [^0-7] | 非八进制 |
| \w | [[:alnum:]] | 单词 |
| \W | [^[:alnum:]] | 非单词 |
| \A | [^[:alphha:]] | 非字母 |
| \L | [^[:lower:]] | 非小写字母 |
| \U | [^[:upper:]] | 非大写字母 |
| \S | [^[:space:]] | 非空白字符 |
| \D | [^[:digit:]] | 非十进制数字 |
| \X | [^[:xdigit:]] | 非十六进制数字 |
| \P | [^[:print:]] | 非可打印字符 |
一些特殊定义:
转义定义: \r (回车), \n (换行), \b (退格), \t (制表符), \v (垂直制表符), \" 和 \'
Regular Express 使用例子
1) 匹配任何单一字符(ASCII) .
2) 匹配行首 ^, 例子如下
1 2 3 | |
3) 匹配行尾 $
1 2 | |
4) 匹配重复字符 *
1
| |
5) 特殊字符, 需要转义 \
6) 匹配一个范围 []
1 2 3 4 | |
注意: 在 [] 中, ^ 表示否定的意思
1 2 | |
7) 匹配重复出现多次 \{\}
1 2 3 | |
参考文档
1) http://blog.csdn.net/wklken/article/details/6429526