从今天开始试着把自己看过的书里的东西有条理的记录在这里。希望可以坚持。
正则表达式是一种匹配文本中的字符序列的字符模式。提到正则表达式应该立刻想到它的应用范围是文本,而正则表达式实际上利用的是文本中字符的模式匹配。
使用正则表达式可以做什么?
(1)查找重复单词。
(2)检查web表单的输入是否符合服务器端数据库存储所允许的格式。正则是确保在客户端发现不适当数据的理想选择。
(3)转换日期格式。美式日期12/25/2009,英式日期25/12/2009,其他2009-12-25
(4)发现错误拼写。检查替换错误的拼写,如行首字母大小写。
(5)为URL添加链接。查找文本中包含的URL,如转换成<a href="the URL">theURL</a>
正则表达式没有统一的标准,不同实现工具之间的差异非常多。
元字符:指在正则模式中具有特殊含义的字符或字符序列。
同一元字符在同一语言的不同环境下可能表示不同的涵义。^可以是行首标识,如^and,也可能是取反标识,如[^and]([]包围的叫做字符类)
数据决定了模式的匹配行为。如URL以HTTP开头或以WWW开头,对应的想匹配文本中的URL,需要分开处理。
创建合适的正则表达式需要对自己的需求有过认真的分析,并且在对数据源进行研究的基础上充分理解了数据内容的特点。
简单的正字表达式:
包括直接量字符和字符序列。
一个元字符通常会匹配一类字符,如/d匹配数字的字符类。
匹配单个可选的字符。如colou?r,?标示它前面的一个字符时可选的,可以出现0次或1次,因而color和colour都将匹配。
匹配多个可选的字符。如colou?r'?s?'?,希望匹配color或者colour的单复数形式以及所有格形式,因而诸如color's可以匹配;但是,如果出现color's'这样的字符序列也会匹配,这显然是错误的。实现初衷的做法是,只有在第一个撇号'不存在时(0次匹配)才可以匹配第二个撇号。这个工作留待后续研究。
其它的限定符:
* : 相关的模式(*前面的“块”)出现0次或多次。 如[0-9]*表示匹配0个数字或者多个数字。
+ : 匹配一次或多次前面的块。
{} : 有几种语法---{n}精确指定匹配次数为n,如ABC[0-9]{3},ABC后跟3个数字
{n,m}匹配最少n次最多m次
{0,m}匹配0次到指定次数
{n,}匹配n到无限次