标签:
学习链接:http://files.cnblogs.com/files/JimmyZhang/Regular-Expression-Tutorial.pdf
1.DFA和NFA(确定性有限自动机、非确定性有限自动机)
正则引擎又分三类:
(1)DFA 引擎在线性时状态下执行,因为它们不要求回溯(并因此它们永远不测试相同的字符两次)
(2)传统的 NFA 引擎运行所谓的“贪婪的”匹配回溯算法,以指定顺序测试正则表达式的所有可能的扩展并接受第一个匹配项。
(3)POSIX NFA 引擎与传统的 NFA 引擎类似,不同的一点在于:在它们可以确保已找到了可能的最长的匹配之前,它们将继续回溯。
2.根据正则引擎的不同,我们能够总结出两条普适的规则:
(1)优先选择最左端的匹配结果。
(2)标准的匹配量词(* + ? {n,m})是优先匹配的。
3.何谓固化分组?
如果你使用固化分组模式的话(?>\w+):来匹配helloworld的匹配过程:首先会匹配到行尾,然后发现无法匹配冒号,报告匹配不成功。
//匹配单个字符
1. “.”:匹配任意字符
2.[abc] 匹配字符组例如: [0-9a-z] 取非:[^0-9a-z]
3.匹配特殊字符
(1)元字符:就是在正则表达式中有特殊意义的字符,比如“.”,则需要
进行转义 "\."
(2)匹配空字符:\r:回车,\n:换行,\t:Tab键,\f:换页;\v:垂直 Tab
4.匹配数字类型
(1)\d 所有单个数字,与 [0-9] 相同
(2)\D 所有非数字,与 [^0-9] 相同
5.匹配字母数字下划线
(1)\w 所有单个大小写字母、数字、下划线,与 [a-zA-Z0-9_] 相同
(2)\W 所有单个非大小写字母、非数字、非下划线,与 [^a-zA-Z0-9_] 相同
6.匹配空字符
(1)\s 所有单个空字符,与 [\f\n\r\t\v] 相同
(2)\S 所有单个非空字符,与 [^\f\n\r\t\v] 相同
//匹配多个字符
1."+":匹配一个或者多个
2."*":匹配0个或者多个字符
3."?":匹配0个或者1个字符
4."{}":可以指定匹配的个数比如:a{3}则匹配"aaa",还可以指定个数区间,比如:a{1,3}
//贪婪匹配和惰性匹配
1.贪婪匹配:就是尽可能匹配更多符合条件的:例如:<br>XXX</br><br>CCC</br>
<br>.*<br>会匹配整个字符串
2.惰性匹配:则是匹配到第一个就加入结果集中:<br>.*<br>会匹配会匹配前半串
//匹配边界
1.单词边界
(1)在表达式的最前面或者最后面加上:"/b"
例如:/bcat/b则只会匹配到第一个cat
The cat s cattered its food all over the room.
(2)在表达式的最前面或者最后面加上:"/B"
含义与上面的相反,表示不在开始或者结尾
2.整个文本边界
(1)"^"表示匹配到文本的开始处
(2)"$"表示匹配到文本的结尾处
//子模式、或匹配
1.子模式:就是用括号括起来
2.或匹配:就是|
//后向引用
1.使用“\数字”来进行后向引用
//实际例子
1.匹配邮箱:我的电子邮件的写法:jimmy_dev@163.com
解决的正则表达式:\w+@\w+\.\w+
(1)但是如果邮件写法变成:jiangjing.dev@henhaoji.com时,上面的正则表达式
不能解决问题,所以修改成[\w\.]+@[\w\.]+\.[\w\.]+
(2)改成这样之后又发现问题了,就是邮件的首字母不能为"."比如:.jiangjing@henhaoji.com
所以改成:\w+[\w\.]*@[\w\.]+\.\w+
//注意事项
1."-"符号在[]里面是特殊字符,需要转义,在外面这是普通字符,"."符号在[]里面是
普通字符,在外面则是特殊字符.
标签:
原文地址:http://www.cnblogs.com/jiangjing/p/5794140.html