学习笔记_正则表达式
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
典型的搜索和替换操作要求提供与预期搜索结果匹配的确切文本。它缺乏灵活性, 若采用这种方法搜索动态文本, 会变得很困难。
使用正则表达式,可以:
*测试字符串内的模式, 称为数据验证。例如测试字符串是否为某种特定的模式。
*替换文本。可以使用正则表达式来识别文档中的特定文本, 完全删除该文本, 或用其他文本替换。
*模式匹配。可以查找文档内或输入域内特定的文本。
1. ?和*
使用 ? 和 * 通配符来查找硬盘上的文件。 ? 通配符匹配文件名中的 0 个或 1 个字符,而 *通配符匹配零个或多个字符。
像 data(\w)?.dat 这样的模式将查找下列文件:
1 data.dat 2 data1.dat 3 data2.dat 4 datax.dat 5 dataN.dat
使用 * 字符代替 ? 字符扩大了找到的文件的数量。data*.dat 匹配下列所有文件:
1 data.dat 2 data1.dat 3 data2.dat 4 data12.dat 5 datax.dat 6 dataXYZ.dat
其中, \w 表示匹配任何字类字符。 与 "[A-Za-z0-9]"等效。
2. ^[0-9]+abc$
^表示匹配输入字符串的开始位置。
[0-9]+表示匹配多个数字.[0-9]匹配单个数字, +匹配一个或多个。
abc$表示匹配字母abc, 并以abc结尾。
$表示匹配输入字符串的结束位置。
3. 字符串匹配
正则表达式描述了一种字符串匹配的模式, 可以用来检查一个串是否含有某种子串, 将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
例如:
1 runoo+b, 可以匹配runoob, runooob, runoooooob等. +号代表前面的字符必须至少出现一次(1次或多次). 2 3 runoo*b, 可以匹配runob, runoob, runoooooob等. *号代表前面的字符可以不出现,也可以出现一次或多次(0次,或1次,或多次). 4 5 colou?r, 可以匹配color或者colour. ?号代表前面的字符最多只可以出现一次(0次,或1次)。
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
4. 非打印字符
下表非打印字符的转义序列:
字符 | 描述 |
\cx | 匹配由x指明的控制字符。x的值必须为A-Z或a-z之一, 否则将c视为一个原义的'c'字符。如, \cM匹配一个Control-M或回车符。 |
\f | 匹配一个换页符。等价于\x0c和\cL。 |
\n | 匹配一个换行符。等价于\x0a和\cJ。 |
\r | 匹配一个回车符。等价于\x0d和\cM。 |
\s | 匹配任何空白字符,包括空格,制表符,换页符等等。等价于[\f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。 |
\t | 匹配一个制表符。等价于\x09和\cl。 |
\v | 匹配一个垂直制表符。等价于\x0b和\cK。 |
5. 特殊字符
特殊字符就是一些含有特殊含义的字符, 如上述的*。
如果要匹配这些特殊字符, 必须首先使字符"转义", 即, 将反斜杠字符\放在它们前面。 如runo\*ob, 匹配结果为runo*ob。
下表列出了正则表达式中的特殊字符:
特殊字符 | 描述 |
$ | 匹配输入字符串的结尾位置。 |
() | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。 |
* | 匹配前面的子表达式零次或多次。 |
+ | 匹配前面的子表达式一次或多次。 |
. | 匹配除换行符 \n 之外的任何单字符。 |
[ | 标记一个中括号表达式的开始。 |
? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。 |
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。 |
^ | 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。 |
{ | 标记限定符表达式的开始。 |
| | 指明两项之间的一个选择。 |