重温正则表达式(一)

正则表达式的定义?

无论是网页编程还是其他编程,都无可避免的要处理字符串,但是有的复杂字符串并不适合用所用语言去处理,比如说注册的时候限定输入格式,web前后端交互的时候处理提交 的数据,在某些情况下,字符串的处理至关重要,但是人们又不想使用复杂的语法去实现这个功能,而强大的正则表达式提供了一个很好的解决方法,这可能和windows或者linux操作性体统中的查找有点类似。

正则表达式常见用法:

1、正则表达式中强大的元字符

查找一个简单的单词

比如精确查找我的英文名chou,那么应该使用\bchou\b来查询(\b是正则表达式中的一个特殊代码,代表单词的开头或者结束也就是分词处),在比如去匹配两个分开的单词“ andy chou”,那么应该使用\bandy\b.*\bchou\b,解释一下这个地方,“.”是另一个字符元匹配除了换行符以外的任意字符,“*”也是一个是元字符,不过它代表的不是别的而是数量——它指定“*”前边的内容可以连续重复使用任意次以使整个表达式得到匹配。先在回头看一下刚才匹配“andy chou”那个表达式,\bandy\b匹配andy,*重复包括字符andy在内的不包括换行符的部分,然后再查找的范围内不断查找后面的那个chou字符,能不能查到就看查找的范围中是不是有了。

想象一下这种情况,当我们去注册某个账号的时候,不是经常需要提供手机号码或者邮箱么,那就是正则表达式一个应用的很多的地方。在往下讲的时候先介绍一个新的元字符\d,它具有匹配一个数字的功能。举个简单的例子:注册的时候需要输入xxx-xxxxxx格式的电话号码,你可以使用\d\d\d-\d\d\d\d\d\d\d\d就可以达到我们想要的效果,上面正则表达式中的“-”符号是个连接符号。但是仔细想想,用来验证这个整个表达式是不是太冗余了,如果是位数很多的情况下呢,如果你能这么想,那么说明你是个追求上进的人,哈哈!我们可以把它优化成:\d{3}-\d{8}。有意思的来了,{3}表示表达式不多不少刚好匹配3次,{8}也是一样的道理。起始这里涉及里正则表达式的一个常见用法——查询次数表达式(书面语叫限定符)的书写,看下面的表格你应该会很清楚,解释都有。

限定符 功能
重复0次或者1次
+ 重复1次或者多次
* 重复0次或者多次
{n} 重复n次
{n,} 重复n次以上
{n,m} 重复n到m次

接着来看另外一个元字符\w(它可以匹配字母,数字,下划线,汉字)

有这种情况,有时候我们查询字符串我们只关心字符的开始或者结束,比如以a开始的单词,或者以b结尾的单词。用第一个以字母a开头的列子来说,我们应该有这样的思路,一个单词的开始也就是说一个单词的分词处,那么我们应该能用上上面说的元字符\b,所以我们现在已经可以写出一部分表达式\ba,在考虑一下,我们并不关心a后面接的是什么字符,也不关心多少个,也可能只有它自己,但它匹配的正常情况下一定是字母,\w可以匹配字母等,进一步写成\ba\w,所以应该再后面加上限定符\ba\w*,结尾\ba\w*\b,ok,可以测试一下


好久没写博客了,如果上面有错,还请各路大神支声,剩下的内容有时间再补全

posted @ 2012-09-07 17:02  andy joe专注web前端  阅读(153)  评论(0编辑  收藏  举报