分享
 
 
 

正则表达式在网络编程中的运用

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

[前言:]在我们编写WEB程序时,经常会判定一个字符串的有效性,如;一个串是否是数字、是否是有效的Email地址等等。假如不使用

正则表达式,那么判定的程序会很长,并且轻易出错,假如使用正则表达式,这些判定就是一件很轻松的工作了。本文全面介绍正则表达式的

慨念、格式。并以在PHP、ASP中的应用实例增加读者的感性熟悉。正则表达式的应用很广,需要大家在学习和实践中不断的总结。

正则表达式简介

简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。在网络编程中应用广泛,如PHP脚本语言或是javascript、VBScript这样的客户端脚本语言都提供了对正则表达式的支持。由此可见,正则表达式已经超出了某种语言或某个系统的局限,成为人们广为接受的概念和功能。

正则表达式可以让用户通过使用一系列的非凡字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。

举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确,假如通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,假如用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判定中具有举足轻重的作用。在后面我们会举例具体介绍。正则表达式形式一般如:/love/,其中位于\"/\"定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入\"/\"定界符之间即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的\"元字符\".所谓元字符就是指那些在正则表达式中具有非凡意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。较为常用的元字符包括:\"+,\"*,?以及{}\",或者\"\\s,\\S,\\d,\\w和\\W\"等等。为了能够方便用户更加灵活的设定匹配模式,正则表达式答应使用者在匹配模式中利用[]界定匹配于某一个范围的字符而不局限于具体的字符。

除了我们以上的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。较为常用的定位符包括:\"^\",\"$\",\"\\b\"以及\"\\B\"。

假如我们希望在正则表达式中实现类似编程逻辑中的\"或\"运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符\"\"。例如:

正则表达式中还有一个较为常用的运算符,即否定符\"[ ^ ]\"。与我们前文所提到的定位符\"^\"不同,否定符\"[ ^ ]\"规定目标对象中不能存在模式中所规定的字符串。一般来说,当\"^\"出现在\"[]\"内时就被视做否定运算符;而当\"^\"位于\"[]\"之外,或没有\"[]\"时,则应当被视做定位符。

最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符\"\\\"。例如:/Th\\*/,该正则表达式将会与目

标对象中的\"Th*\"而非\"The\"等相匹配。

正则表达式的语法规则和标记

现在我们正式进入则表达式的学习,我会根据实例结合讲解正则表达式的用法,看完后你就会觉得写UBB代码如此简单了,只要你一步一步的跟着我学看完本文章后你就成为UBB高手了。激动人心的就是你能写出自已的UBB标签来了,再也不用到别人那里去拷贝现成的代码和模板了。还好VBScritp5.0给我们提供了\"正则表达式\"对象,只要你的服务器安装了IE5.x,就可以运行了。

字符描述:

^符号匹配字符串的开头。例如:

^abc与\"abcxyz\"匹配,而不与\"xyzabc\"匹配

$符号匹配字符串的结尾。例如:

abc$与\"xyzabc\"匹配,而不与\"abcxyz\"匹配。

注重:假如同时使用^符号和$符号,将进行精确匹配。例如:

^abc$只与\"abc\"匹配

*符号匹配0个或多个前面的字符。例如:

ab*可以匹配\"ab\"、\"abb\"、\"abbb\"等

+符号匹配至少一个前面的字符。例如:

ab+可以匹配\"abb\"、\"abbb\"等,但不匹配\"ab\"。

?符号匹配0个或1个前面的字符。例如:

ab?c?可以且只能匹配\"abc\"、\"abbc\"、\"abcc\"和\"abbcc\"

.符号匹配除换行符以外的任何字符。例如:

(.)+匹配除换行符以外的所有字符串

xy匹配\"x\"或\"y\"。例如:

abcxyz可匹配\"abc\"或\"xyz\",而\"ab(cx)yz\"匹配\"abcyz\"和\"abxyz\"

{n}匹配恰好n次(n为非负整数)前面的字符。例如:

a{2}可以匹配\"aa\",但不匹配\"a\"

{n,}匹配至少n次(n为非负整数)前面的字符。例如:

a{3,}匹配\"aaa\"、\"aaaa\"等,但不匹配\"a\"和\"aa\"。

注重:a{1,}等价于a+

a{0,}等价于a*

{m,n}匹配至少m个,至多n个前面的字符。例如:

a{1,3}只匹配\"a\"、\"aa\"和\"aaa\"。

注重:a{0,1}等价于a?

[xyz]表示一个字符集,匹配括号中字符的其中之一。例如:

[abc]匹配\"a\"、\"b\"和\"c\"

[^xyz]表示一个否定的字符集。匹配不在此括号中的任何字符。例如:

[^abc]可以匹配除\"a\"、\"b\"和\"c\"之外的任何字符

[a-z]表示某个范围内的字符,匹配指定区间内的任何字符。例如:

[a-z]匹配从\"a\"到\"z\"之间的任何一个小写字母字符

[^m-n]表示某个范围之外的字符,匹配不在指定范围内的字符。例如:

[m-n]匹配除从\"m\"到\"n\"之间的任何字符

\\符号是转义操作符。例如:

\\n换行符

\\f分页符

\\r回车

\\t制表符

\\v垂直制表符

\\\\匹配\"\\\"

\\/匹配\"/\"

\\s任何白字符,包括空格、制表符、分页符等。等价于\"[\\f\\n\\r\\t\\v]\"

\\S任何非空白的字符。等价于\"^\\f\\n\\r\\t\\v]\"

\\w任何单词字符,包括字母和下划线。等价于\"[A-Za-z0-9_]\"

\\W任何非单词字符。等价于\"[^A-Za-z0-9_]\"

\\b匹配单词的结尾。例如:

ve\\b匹配单词\"love\"等,但不匹配\"very\"、\"even\"等

\\B匹配单词的开头。例如:

ve\\B匹配单词\"very\"等,但不匹配\"love\"等

\\d匹配一个数字字符,等价于[0-9]。例如:

abc\\dxyz匹配\"abc2xyz\"、\"abc4xyz\"等,但不匹配\"abcaxyz\"、\"abc-xyz\"等

\\D匹配一个非数字字符,等价于[^0-9]。例如:

abc\\Dxyz匹配\"abcaxyz\"、\"abc-xyz\"等,但不匹配\"abc2xyz\"、\"abc4xyz\"等

\\NUM匹配NUM个(其中NUM为一个正整数),引用回到记住的匹配。例如:

(.)\\1匹配两个连续相同的字符。

\\oNUM匹配n(其中n为一个小于256的八进制换码值)。例如:

\\o011匹配制表符

\\xNUM匹配NUM(其中NUM为一个小于256的十六进制换码值)。例如:

\\x41匹配字符\"A\"

应用实例

在对正则表达式有了较为全面的了解之后,就可以在Perl,PHP,以及ASP等程式中使用正则表达式了。

下面以PHP语言为例,使用验证用户在线输入的邮件地址以及网址的格式是否正确。PHP提供了eregi()或ereg()资料处理函数实现字串比

对剖析的模式匹配操作ereg()函数的使用格式如下:

ereg(pattern,string)

其中,pattern代表正则表达式的模式;而string则是执行查找替换操作的目标对象,如Email地址值。本函式以pattern的规则来剖析比

对字串string,找到则传回值为true。函式ereg()与eregi()的区别就是前者区分大小写,后者与大小写无关。使用PHP编写的程序代码如下:

<?php

if(ereg(\"^([a-z0-9_-])+@([a-zZ0-9_-])+(\\.[a-z0-9_-])+[a-z]{2,3}$\",$email))

{echo\"您的E-Mail通过初步检查!\";}

else

{echo\"不是合法的E-Mail地址,请重新输入!\";}

?>

这个例子是可对使用者输入的E-Mail作简单的检查,检查使用者的E-Mail字串是否有@字元,在@字元前有小写英文字母、数字或下\"_\",在@之后有数节字串,最后的小数点后只能有二个或三个小写英文字母。如webmaster@mail.sever.net,hello_2001@88new.cn就可以通过检查,而New99@253.com(出现大写字母)和new99@253.comn(最后的小数点后只能超过3个英文字母)就不能通过检查。

我们通过调用自定义正规则判别函式也可以进行检查操作,如下面的网址检验函式:

functionVerifyWebSiteAddr($strWebSiteAddr){

return(eregi(\"^([_0-9a-z-]+.)+([0-9a-z-]+.)+[a-z]{2,3}$\",$strWebSiteAddr));

}

我们知道,PHP程式的运行

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有