正则表达式总结 (一)

来源:互联网 发布:幽浮2修改数据 编辑:程序博客网 时间:2024/06/17 02:20

1. 保留的12个特殊字符:元字符

[ ] ( ) \ ^ + * ? - . $

要使用这些字符做文本字符是需要用反斜杠“\”进行转义。例如

匹配1+1=2的正则表示式为:1\+1=2;

 

2. 字符集

字符集由方括号“[]” 括起,告诉正则表达式引擎匹配集合中的单个字符,可以使用连字符“-”定义一个字符范围:[a-zA-Z0-9]。

 

3. 取反字符集

在左方括号“[”后边紧跟一个尖括号“^”,对字符集取反:[^a-zA-Z1-9]匹配数字字母以外的任何字符。

 

4. 字符集的简写

\d: 匹配数字,相当于 [0-9]

\w:匹配单词字符,相当于 [a-zA-Z0-9]

\s:匹配空白字符

\D:[^\d]

\W:[^\w]

\S:[^\s]

 

5. 重复匹配

?:匹配0次或者1次

+:匹配1次或多次

*:匹配0次或多次

 

6. 限制重复匹配次数

{min, max}:重复少min次,最多max次

{min, }:重复至少min次

{, max}: 重复最多max次

{min}:重复min次

 

7. 贪婪性与懒惰性

重复匹配符“? + *”是具有贪婪性的:例如要匹配一个HTML标签<h2>,用作测试的字符串为“This is <h2>test</h2> result”,如果用正则表达式“<.+>”来匹配,则返回的不是我们期望的“<h2>”与“</h2>”,而是“<h2>test</h2>”。

 

分析:正则表达式引擎先匹配到第一个字符“”,之后用“”去匹配后面的任意字符,直到匹配失败,在本例中会匹配到换行失败(“.”不匹配换行符),也就是说已经匹配到“<h2>test</h2>result”然后再用“>”回溯匹配,知道回溯找到“>”,匹配成功,因此返回“<h2>test</h2>”。

 

解决方法:使用懒惰性取代贪婪性

在重复匹配符“? + *”的后面加一个问号“?”,告诉正则引擎尽可能少的重复上一个字符。继续上面的例子,引擎先匹配到“<”成功之后用“.”匹配“h”也成功,紧接着就会用“>”匹配“2”,结果失败,引擎会进行回溯,用“.+”扩展匹配,因此“<h2”也匹配成功,然后继续用“>”匹配下一个字符“>”,得到一个成功的匹配,返回“<h2>”。

 

8. 匹配字符串开始结束标记

“^”匹配字符串的开始部分。

“$”匹配字符串的结束部分。