正则表达式定义
正则表达式(Regular Expression)是一种字符模式,用来查找匹配的字符。通过Linux中的工具(如grep/sed等)能够在处理数据时,使用正则表达式对数据进行匹配过滤,并将匹配到的数据显示出来,未匹配的数据过滤掉。
正则表达式的基本元素包含普通字符和元字符。
- 普通字符:即可以字面的意思去理解,如a只能理解为英文小字母a,没有其他隐藏含义。
- 元字符:在正则表达式中具有特殊意义的专用字符。如*符号的字面意思只是一个符号,而在正则表达式中则表示重复前面字符0次或更多次。
POSIX标准将正则表达式分为两类:基本正则表达式和扩展正则表达式
下表中将列出常用的正则表达式字符及其含义
常用元字符
符号 | 功能 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母、数字、下划线或汉字 |
\s | 匹配任意的空白字符 |
\b | 匹配单词的开头或结尾的位置 |
^ | 匹配字符串的行首,如果在[ ]里面则代表非 |
$ | 匹配字符串的末尾 |
常用限定符
符号 | 功能 |
---|---|
* | 重复0次或更多次在*字符之前的字符 |
+ | 重复一次或更多次 |
? | 重复0次或一次 |
{n} | 重复n次 |
{n,} | 重复至少n次,即重复>=n次 |
{n,m} | 重复n到m次 |
常用反义词
符号 | 功能 |
---|---|
\W | 匹配任意不是字母、数字、下划线、汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^a] | 匹配除了a以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
其他常用
符号 | 功能 |
---|---|
\ | 转义符,屏蔽一个元字符的特殊含义 |
[] | 匹配中括号里面的任意一个字符,如[abc]d,可以匹配ad、bc或cd |
() | 将正则表达式的一部分括起来组成一个单元,从而实现对整个单元使用数量限定或匹配 |
| | 连接两个子表达式,表示或关系 |
[[:xxx:]] | POSIX预定义一些命名字符, [[:digit:]]表示数字[0-9] [[:lower:]]表示小写字母 [a-z] |
POSIX字符类
类名 | 含义 |
---|---|
[:upper:] | 表示大写字母[A~Z] |
[:lower:] | 表示小写字母[a~z] |
[:digit:] | 表示数字[0~9] |
[:alnum:] | 表示大小写字母和数字[A~Z a~z 0~9] |
[:space:] | 表示空格或TAB键 |
[:alpha:] | 表示大小写字母[A~Z a~z] |
[:cntrl:] | 表示Ctrl键 |
[:graph:] | 表示ASCII码33~126之间的字符 |
[:print:] | 表示ASCII码33~126之间的字符 |
[:xdigit:] | 表示16进制的数字[0~9 A~F a~f] |
正则表达式在线测试网址:http://rubular.com/
正则表达式测试工具推荐:Notepad++(https://notepad-plus-plus.org/),使用查找功能中的正则表达式查找
在本节中,正则表达式只讲到一些基础部分,如果大家感兴趣,可以自行查阅部分资料。