作者:ET Dreams http://blog.csdn.net/etmonitor/
Regular Expressions (1) ---- What is Regular Expressions?<o:p></o:p>
<o:p> </o:p>
正则表达式是常见常忘,所以还是记下来比较保险,于是就有了这篇笔记。<o:p></o:p>
希望对大家会有所帮助。J<o:p></o:p>
1.什么是正则表达式.............................................................................................................................................................. 2<o:p></o:p>
2.正则表达式的起源............................................................................................................................................................. 2<o:p></o:p>
3. 正则表达式使用祥解........................................................................................................................................................ 3<o:p></o:p>
3.1基本语法.............................................................................................................................................................................. 3<o:p></o:p>
3.1.1普通字符..................................................................................................................................................................... 3<o:p></o:p>
3.1.2非打印字符................................................................................................................................................................. 3<o:p></o:p>
3.1.3特殊字符..................................................................................................................................................................... 3<o:p></o:p>
3.1.4字符集........................................................................................................................................................................... 4<o:p></o:p>
3.1.5在字符集中使用元字符............................................................................................................................................. 5<o:p></o:p>
3.1.6预定义字符集.............................................................................................................................................................. 5<o:p></o:p>
3.1.7 限定符........................................................................................................................................................................... 6<o:p></o:p>
3.1.8定位符........................................................................................................................................................................... 6<o:p></o:p>
3.1.9 “.”元字符...................................................................................................................................................................... 7<o:p></o:p>
3.1.10用 “|”表示选择.......................................................................................................................................................... 8<o:p></o:p>
3.1.11用 “()”表示分组.................................................................................................................................................. 8<o:p></o:p>
3.1.12 “?”的补充说明.......................................................................................................................................................... 8<o:p></o:p>
3.1.13给正则表达式添加注释......................................................................................................................................... 8<o:p></o:p>
3.1.14操作符的运算优先级............................................................................................................................................... 8<o:p></o:p>
3.2 高级话题............................................................................................................................................................................... 9<o:p></o:p>
3.2.1反向引用..................................................................................................................................................................... 9<o:p></o:p>
3.2.2在正则表达式中指定模式option........................................................................................................................... 9<o:p></o:p>
3.2.3 Lookaround断言..................................................................................................................................................... 10<o:p></o:p>
4. 正则表达式基本语法索引............................................................................................................................................ 11<o:p></o:p>
5. 正则表达式高级语法索引.............................................................................................................................................. 15<o:p></o:p>
6. 参考资料................................................................................................................................................................................. 17<o:p></o:p>
7. 推荐工具................................................................................................................................................................................. 17<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
简单的说,正则表达式是一种可以用于文字模式匹配和替换的强有力的工具。是由一系列普通字符和特殊字符组成的能明确描述文本字符串的文字匹配模式。<o:p></o:p>
正则表达式并非一门专用语言,但也可以看作是一种语言,它可以让用户通过使用一系列普通字符和特殊字符构建能明确描述文本字符串的匹配模式。除了简单描述这些模式之外,正则表达式解释引擎通常可用于遍历匹配,并使用模式作为分隔符来将字符串解析为子字符串,或以智能方式替换文本或重新设置文本格式。正则表达式为解决与文本处理有关的许多常见任务提供了有效而简捷的方式。<o:p></o:p>
正则表达式具有两种标准:<o:p></o:p>
· 基本的正则表达式(BRE – Basic Regular Expressions)<o:p></o:p>
· 扩展的正则表达式(ERE – Extended Regular Expressions)。<o:p></o:p>
ERE包括BRE功能和另外其它的概念。<o:p></o:p>
<o:p> </o:p>
正则表达式目前有两种解释引擎:<o:p></o:p>
· 基于字符驱动(text-directed engine)<o:p></o:p>
· 基于正则表达式驱动(regex-directed engine) <o:p></o:p>
Jeffery Friedl把它们称作DFA和NFA解释引擎。<o:p></o:p>
<o:p> </o:p>
约定:<o:p></o:p>
为了描述起来方便,在本文中做一些约定:<o:p></o:p>
1. 本文所举例的所有表达时都是基于NFA解释引擎的。<o:p></o:p>
2. 正则表达式,也就是匹配模式,会简写为Regex。<o:p></o:p>
3. Regex的匹配目标,也就是目标字符串,会简写为String。<o:p></o:p>
4. 匹配结果用会用黄色底色标识。<o:p></o:p>
5. 用1\+1=2 括起来的表示这是一个regex。<o:p></o:p>
6. 举例会用以下格式:<o:p></o:p>
Regex<o:p></o:p> |
Target String<o:p></o:p> |
Description<o:p></o:p> |
test<o:p></o:p> |
This is a test<o:p></o:p> |
会匹配test,testcase等<o:p></o:p> |
<o:p> </o:p>
正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。<o:p></o:p>
1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。 <o:p></o:p>
随后,发现可以将这一工作应用于使用Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson是Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的qed 编辑器。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。具有完整语法的正则表达式使用在字符的格式匹配方面上,后来被应用到熔融信息技术领域。自从那时起,正则表达式经过几个时期的发展,现在的标准已经被ISO(国际标准组织)批准和被Open Group组织认定。<o:p></o:p>