创建时间:2015/12/10
修改时间:
先推荐几个学习正则表达式的好的网址:
1. 基本语法
一个正则表达式就被称为一种模式 ( pattern ),用来匹配符合该模式的字符串。
选择
| 竖直分隔符表示选择。例如 “gray” | “gray” 可以表示是 “gray” 还是 “grey” .
数量限定符
数量限定符用来规定前面的字符出现的次数,常用的数量限定符有 “+” 、 “?” 、 “*” ,当然如果字符后面没有数量限定符的话,那么就表示字符只出现一次(这好像是废话呀!)
- “+“ 表示字符至少出现一次,也就是出现一次或多次。比如说: “gra+y” 则可以匹配 “gray” 、 “graay” 、 “graaaaay” ……
- “?” 表示字符至多出现一次,也就是出现零次或一次。例如: “gra?y” 则可以匹配 “gry” 、 “gray” (这就没有……了,只存在这两种)
- “*“ 表示字符可以出现零次、一次或多次。其实,如果有了解过 闭包 这个概览的话,那么 “*” 就表示是字符集合的 闭包) 。
- 匹配
圆括号用来定义操作符的范围和优先度。比如说: “gr(a|e)y” == “gray|grey” , “gr(ae?|b)y” == “gr(a|ae|b)y”
上面讲到了”*“这个数量限定符号,我们需要跟模式匹配的”*“分开 通常我们会用到模式匹配的地方,比如说: “name_.xml” ,表示所有带 “name_“ 的 xml 文件,匹配的可以有 “name_abcd.xml” 、 “name_abcdefg.xml” 、等等。在这里 “\“ 就不是数量限定的意思,而是替代的意思,在上面的例子中 “*” 就可以替代 “abcd” 、”abcdefg” ……
讲了这么多,可能我们大概能了解到“正则表达式”是个什么东东了。也就是用多种元字符和规定的运算符组成的小的表达式来表示更大、更复杂的字符串。
2.字符
下面,我们就要学习一下表达式中的字符,正则表达式就是由这次字符组合而成。正则表达式中包含:普通字符和特殊字符(我的理解就是相当于数学表达式中的运算字符)。
特殊字符就是由特殊含义的字符,例如限定符号、定位符……。当在匹配特殊字符的时候,要先对特殊字符进行转义。例如 “a*?” 就表示找 ‘a’ 后面有零个或者一个’*’的字符串。
2.1 普通字符
普通字符就是常见的大小写字母、数字和标点符号,当然还有一些其它的字符(就是非打印字符、特殊字符、限定符、定位符的其它字符,唉!理解就好。)。
2.2 非打印字符
非打印字符,大多是一些转义字符,带有转义符号 “\” 。
字符 | 描述 |
---|---|
\cx | 匹配由x指明的控制字符。比如 \cM 就匹配Control-M或则是转义符.x只能是大小写字母,否则会将c看作是一个普通字符 |
\f | 匹配一个换页符。 |
\n | 匹配一个换行符。 |
\s | 匹配一个空白符,包括空格、制表符、换页符等等。 |
\S | 匹配一个非空白符。 |
\t | 匹配一个制表符。 |
\v | 匹配一个垂直制表符。 |
2.3 限定符
限定符表示正则表达式中的某个组件必须出现多少次才能满足匹配。除了基本语法中介绍的三种数量限定符 ‘*’ 、’+’ 、’?’ 外(大家应该还记得这三个符号的意思吧?),还有三种方式。
字符 | 描述 |
---|---|
{n} | n是一个非负整数。匹配确定的n次。例如: “fo{2}” 表示 “foop” , 而不能匹配其它。 |
{n,} | n是一个非负整数。匹配 n 次及 n 次以上。例如: “fo{2,}p” 可以匹配 “foop” 、”fooop” 、”foooop”……而不能匹配 “fop”。 |
{n,m} | n 和 m 都是非负整数,且 n < m 。表示匹配至少 n 次,至多 m 次。 |
值得注意的是: ‘?’ 、’+’ 、’*’ 表示的都是“贪婪”匹配,也就是会尽可能多的匹配,只有在它们的后面加上’?’,才能变成非贪婪匹配或者是最小匹配