很多人对正则表达式的印象都是用来做表单验证的,这其实是不大准确的。正则表达式目前在很多软件中都得到了广泛的应用,包括Linux,Unix等操作系统,VBScript,Java,PHP等开发环境中,以及很多应用软件都能应用到正则表达式。
一,正则的历史。
首先先来扫清一个误区,老是有人认为正则表达式是JS自己发明的,这当然是不正确的。1956年,一位名叫Stephen Kleene的数学家在McCulloch和pitts早期工作的基础上,发表了一篇标题为“神经网的表示法”的论文,第一次引入了正则表达式的概念。所谓的正则表达式就是用来描述被他称为“正则集的代数”的表达式,因此采用了“正则表达式”这个术语。
随后,人们发现可以将这一工作应用于使用ken Thompson的计算搜索算法的一些早期研究,Ken Thompson是Unix的主要发明人,第一个将正则表达式使用在应用程序上的就是Unix中的qed编辑器。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。
正则表达式的发展历史并不是特别的长远,但是推出之后却迅速被各大编程语言所吸收采纳。这主要得益于它自己的特点:
第一,相较于传统的验证方式,正则表达式可以更高效的完成需要做的验证工作。
第二,捕获字符串的能力,正则也可以很好的完成工作,比如截取url的域名或者其他的内容等等。
第三,表达灵活和写法简洁。从表单中复杂的各种验证,到对字符串的各种处理,都可以用正则表达式轻松实现。
二.正则表达式的定义
正则表达式描述了一种字符串匹配的模式,可以用来检索一个字符串中是否含有某种子字符串,将匹配的子字符串做替换或者从某个串中取出符合某个条件的子字符串等。
正则表达式是由普通字符(a-z)以及特殊字符(也叫元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
2.1普通字符
由所有那些未显示指定为元字符的打印和非打印字符组成。这就包括了所有的大写和小写字符字符,所有数字,所有的标点符号以及一些符号。
2.2特殊字符
特殊字符,指有特殊含义的字符,如“*.exe”中的*.简单的说就是表示任何字符串的意思,如果要查找文件名中有*的文件,则需要对*进行转义,即在其前面加一个.ls .exe。
正则表达式里的特殊字符$,( ),*,+,...[,?,\,^,|
$匹配输入的字符串的结尾位置。
()标记一个子表达式的开始和结束位置。
*匹配前面的子表达式零次或多次。
+匹配前面的子表达式一次或多次。
.匹配除换行符 之外的任何单字符。
[标记一个中括号表示式的开始。
?匹配前面的子表达式零次或一次。
{标记限定表达式的开始。
将下个字符标记为特殊字符,或原意字符,或向后引用,或八进制转义符。
^匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。
|指明两项之间的一个选择。
2.3限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*,+,?,{n},{n,},{n,m}共6种。
*匹配前面的子表达式零次或多次.
+匹配前面的自表达式一次或多次,?匹配前面的子表达式零次或一次。
{n} n是一个非负整数,匹配确定的n次。
{n,}n是一个非负整数,至少匹配n次。
{n,m}m和n均为非负整数,且n<=m,最少匹配n次且最多匹配m次。
2.4定位符
用来描述字符串或单词的边界,^和$分别指字符串的开始和结束,描述单吃的前或后边界,B表示非单词边界,不能对定位符使用限定符。
三.正则表达式在web中的应用
正则表达式在web系统中的应用广泛,可以进行数据格式检测,替换相关文本,提取感兴趣的文本内容等。
例如:验证字符串中E-mail地址的合法性
邮件地址格式是<用户名@域名>,对于用户名,除了数字和字母外,有的允许有“-”,有的允许有“.”,也有的两者都可,或者允许其他的特殊字符。对此我们只能根据具体情况判断。文字中假设除字母和数字外还允许“.”“-”并且“.”“-”不嗯给你出现在首末位。“,”“。”“-”不能相连。域名中各段除数字和字母外只允许出现”-”且不能不出现在首位和末位,各段用“.”连接,我们可以从域名得知最后一段大于一位且只有字母,根据以上内容我们可以写出表达式俩判断该串是否是合法的邮件地址。
是不是感觉很麻烦,光听规则就感到头疼?别急,分部解释如下:
^:匹配开始
([a-z0-9A-Z]+[-|.]?)+:数字或字母大于一位,“-”或”.“以上组合重复1次以上。
[a-z0-9A-Z]:用户名以数字或字母结尾。
@:匹配“@”[a-z0-9A-Z]+匹配多位数字或字母
(-[a-z0-9A-Z]+)?:匹配一加多位数字或字母0次或1次。
.:匹配”.”
+:匹配括号内的内容多次
[a-zA-Z]{2,}匹配字母2次以上
$:匹配结尾把上面的各项组合一起,就可以匹配一个比较全面的邮件地址,正则表示式如下:
^([a-z0-9A-Z]+[-|.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?.)+[a-zA-Z]{2,}$
复杂么?整个来看确实还蛮复杂的,但当你把功能分开,先逐个实现,再组合在一起,其实也没那么复杂吧。
全栈工程师需要懂正则来做各种表单验证,字符串处理,架构师也要懂正则表达式,因为框架中都会用到正则表达式。那么,根据前文提到的,正则表达式理所当然是我们必须学会的语言之一。HTML5的正则表达式项目开发课程有啥特点呢?最大的特点就是突出实用和高效。在精通前端的基础上学习正则表达式,能够更好的站在更高的层次去思考和学习正则表达式。
正则表达式项目开发课程如何讲授呢?主要突出以下几点:
第一,循序渐进。本课程先从基础讲起,先让学生熟悉更种字符串操作,掌握字符串的验证方式。然后结合实际,找一个实际的在线项目,然后分析验证的方式和方法,讲解正则表达式的用法。
第二,项目驱动。全程以项目来驱动知识点的学习,在了解实际的需求后,用正则表达式实现我们的需求。
第三,注重实战。学生在听完讲师的课堂面授后,要亲自动手完成另一个新项目。
正则表达式项目开发课程内容包含正则表达式基础,高级的用法及各种常见验证的写法用三个组成部分,具体内容如下:
第一部分:正则表达式的基础。本部分主要包含三个方面:
正则表达式基础。内容主要包含正则的语法,常见符号及简单的表单验证。
第二部分:高级用法及复杂的正则验证。
第三部分:找个具体的项目,在实际中体会正则的好处。
四.结语
正则表达式语法简洁,功能强大,特别在对数据的验证问题上,在日常数据处理与软件开发中,正则表达式已成为不可缺少的工具,相信随着web网的发展,正则表达式的应用会越来越强大越来越易使用。