正则表达式是基于样式匹配的文本处理技术的关键所在。想要在编写文本处理工具方面驾轻就熟,你就必须对正则表达式有一个基本的理解。正则表达式是一种用于文本匹配的形式小巧、具有高哦啊嘟针对性的编程语言。只依靠通配符技术,能够匹配的文本范围相当有限。本文将对基础的正则表达式进行详解。
正则表达式 | 描述 | 实例 | ||
^ | 行起始标记 | ^tux匹配以tux起始的行 | ||
$ | 行尾标记 | tux$匹配以tux结尾的行 | ||
. | 匹配任意一个字符 | Hack.匹配Hackl和Hacki,但是不能匹配Hackl2和Hackil,它只能匹配单个字符 | ||
[] | 匹配包含在[字符]之中的任意一个字符 | coo[kl]匹配cook或cool | ||
[^] | 匹配除[^字符]之外的任意一个字符 | 9[^01]匹配92、93,但是不匹配91或90 | ||
[-] | 匹配[]中指定范围内的任意一个字符 | [1-5]匹配从1~5的任意一个数字 | ||
? | 匹配之前的项1次或0次 | colou?r匹配color或colour,但是不能匹配colouur | ||
+ | 匹配之前的项1次或多次 | Rollno-9+匹配Rollno-99,Rollno-9,但是不能匹配Rollno- | ||
* | 匹配之前的项n次 | co*l匹配cl、col、coool等 | ||
() | 创建一个用于匹配的子串 | ma(tri)?匹配max或maxtrix | ||
{n} | 匹配之前的项n次 | [0-9]{3}匹配任意一个三位数,[0-9]{3}可以扩展为[0-9][0-9][0-9] | ||
{n,} | 之前的项至少需要匹配n次 | [0-9]{2,}匹配任意一个两位或更多位的数字 | ||
{n,m} | 指定之前的项所必需匹配的最小次数和最大次数 | [0-9]{2,5}匹配从两位数到五位数之间的任意一个数字 | ||
| | 交换--匹配|两边的任意一项 | Oct (1st|2nd)匹配Oct 1st或Oct 2nd | ||
\ | 转义符可以将上面介绍的特殊字符进行转义。 | a\.b匹配a.b,但不能匹配ajb。通过在.之间加上前缀\,从而忽略了.的特殊意义 | ||
POSIX字符类
正则表达式 | 描述 | 示例 | ||
[:alnum:] | 字母与数字字符 | [[:alnum:]]+ | ||
[:alpha:] | 字母字符(包括大写字母与小写字母) | [[:alpha:]]{4} | ||
[:blank:] | 空格与制表符 | [[:blank:]]* | ||
[:digital:] | 数字字符 | [[:digital:]]? | ||
[:lower:] | 小写字母 | [[:lower:]]{5,} | ||
[:upper:] | 大写字母 | ([[:upper:]]+)? | ||
[:punct:] | 标点符号 | [[:punct:]] | ||
[:space:] | 包括换行符、回车等在内的所有空白字符 | [[:space:]]+ |