什么是正则表达式
正则表达式是一种描述一组字符串的模式,为处理大量文本、字符串而定义的一套规则和方法,以行为单位进行处理。正则表达式分为两类:基本正则表达式(BRE)和扩展正则表达式(ERE)。在linux中使用正则表达式较多的有三个工具,分别为grep,sed和awk,这三个工具被称为linux文本处理的三剑客。
基本正则表达式
字符匹配:
.:匹配任意单个字符
[ ]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
几种特殊表示:
特殊符号 | 代表意义 |
[:alnum:] | 代表英文大小写字符及数字,亦即 0-9, A-Z, a-z |
[:alpha:] | 代表任何英文大小写字符,亦即 A-Z, a-z |
[:blank:] | 代表空白键与 [Tab] 按键两者 |
[:cntrl:] | 代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等 |
[:digit:] | 代表数字而已,亦即 0-9 |
[:graph:] | 除了空白字符 (空白键与 [Tab] 按键) 外的其他所有按键 |
[:lower:] | 代表小写字符,亦即 a-z |
[:print:] | 代表任何可以被打印出来的字符 |
[:punct:] | 代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $... |
[:upper:] | 代表大写字符,亦即 A-Z |
[:space:] | 任何会产生空白的字符,包括空白键, [Tab], CR 等等 |
[:xdigit:] | 代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字符 |
匹配次数:
*:匹配其前面的字符任意次(0次、1次或多次)
.*:匹配任意长度的任意字符
\?:匹配起前面字符0次或1次
\+:匹配其前面字符1次或多次
\{m\}:匹配其前面的字符m次
\{m,n\}:匹配其前面字符最少m次,最多n次
\{m,\}:匹配其前面字符最少m次
\{,n\}:匹配其前面字符最多n次
位置锚定:
^:行首锚定
$:行尾锚定
^$:匹配空白行
\<或\b:词首锚定
\>或\b:词尾锚定
\<PATTERN\>:匹配完整的单词
分组及引用:
\(\):将多个字符捆绑在一起,当做一个整体处理
分组括号匹配到的内容,会被正则表达式引擎自动记录到内部变量中,变量为
\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符
\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符
扩展正则表达式
字符匹配:
.:匹配任意单个字符
[ ]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
次数匹配:
*:匹配其前面的字符任意次(0次、1次或多次)
?:匹配起前面字符0次或1次
+:匹配其前面字符1次或多次
{m}:匹配其前面的字符m次
{m,n}:匹配其前面字符最少m次,最多n次
{m,}:匹配其前面字符最少m次
{,n}:匹配其前面字符最多n次
位置锚定:
^:行首锚定
$:行尾锚定
\<或\b:词首锚定
\>或\b:词尾锚定
分组及引用:
():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中,变量为\1,\2等
或:
|:a|b表示a或者b
比较基本正则表达式和扩展正则表达式发现,基本正则表达式的很多符号需要转义“\”,而扩展正则表达式不需要