利用正则表达式开发动态网页

时间:2022-10-11 04:00:54

利用正则表达式开发动态网页

[摘 要]在动态网页设计中,利用正则表达式可以高效、快速地进行开发,本文探讨了在PHP中利用正则表达式进行url地址解析,密码和邮件验证以及文本文件的处理。

[关键词]正则表达式 PHP 动态网页

[中图分类号]TP[文献标识码]A[文章编号]1007-9416(2010)02-0052-02

1 正则表达式

正则表达式由美国数学家Stephen Kleene于1956年提出,主要用途是用来描述正则集代数。正则表达式提供了一种从字符集中搜寻特定字符串的机制,它让用户使用一系列的指定字符构建匹配模式,并将匹配模式与相应的数据文件、程序输入等目标对象进行比较,再根据比较的结果执行对应的程序。

正则表达式功能强大,具体而言,它有四大功能:查询、提取、分割、替换。这四大功能在动态网页开发中都得到了很好的应用。本文以PHP编程中的文本数据处理为例子,讨论正则表达式在动态网页中的应用。

2 PHP中的正则表达式

正则表达式是通过在一对分隔符之间放入表达式模式的各种组件来构造一个表达式,即/expression/。表达式由普通字符(例如字符a-z)和特殊字符(元字符)组成。普通字符指的是未显式指定为元字符的打印和非打印字符,包括所有的大小写字母、数字、标点符号等等。而特殊字符,即元字符,指的是一些具有特殊含义的字符,具体而言,主要有以下一些。

$符号。匹配输入字符串的结尾,例如abc$与“ddd abc”匹配,如果要匹配$字符本身,则要用\$,其它的元字符类似。

*符号。匹配前面的子表达式零次或多次,如ab*与“ab”,“abb”,“abbbbb”等都匹配。

+符号。匹配前面的子表达式一次或多次,如ab+与“abb”,“abbb”,“abbbbb”等匹配,但与“ab”不匹配。

(和)符号。用来标记一个子表达式的开始和结束位置,这个子表达式可以供以后使用。

.符号。匹配除换行符\n之外的任何单字符。如(.)+可以匹配除换行符外的所有字符串。

?符号。匹配0或1个前面的字符,如ab?c?可以而且只能匹配“abc”、“abbc”、“abcc”、“abbcc”。

|符号。匹配两项之间的一个,如a|b。匹配“a”或“b”,abc|xyz可匹配“abc”或“xyz”。

{n}。n必须是一个非负整数,匹配n次,例如,a{2}不能匹配“ba”,但能匹配“baa”。

{n,}。n必须是一个非负整数,它指的是匹配至少n次,例如,a{2,}不能匹配“ba”,但能匹配“baaaaaa”中的所有的a。

{n,m}。n和m必须都是非负整数,其中n

[abc]表示一个字符集,匹配括号中字符的其中一个。[abc]匹配“a”,“b”和“c”。

[^abc]表示一个否定的字符集。匹配不在括号中的任何字符。[^abc]可以匹配“a”,“b”和“c”之外的任何字符。

[a-z]表示某个范围的字符,匹配指定区间内的任何字符。[a-z]匹配“a”到“z”之间的任何一个小写字母字符。

[^a-z]表示某个范围之外的字符,匹配不在指定范围内的字符。[^a-z]匹配除“a”到“z”之间的任何字符。

3 用PHP中的正则表达式函数处理动态网页设计问题

PHP中有两套正则函数,两者功能差不多,其中一套是由PCRE(Perl Compatible Regular Expression)库提供的。使用“preg_”为前缀命名的函数;一套由POSIX(Portable Operating System Interface of Unix )扩展提供的。使用以“ereg_”为前缀命名的函数;随着版本的更新的,并且PCRE和perl的形式差不多,更利于我们在perl和php之间切换,所以这里主要使用PCRE正则函数。

3.1 查询url地址

在动态网页设计中,有时要在一个字符串中查找一个url地址,我们可以利用正则表达式的强大功能轻松解决这一问题。

首先分析一个url地址具备哪些特征。

(1)以或者https://或者ftp://等开头。

(2)后面跟一个单词,在单词后面是一个“.”,这种单词加“.”的情况可能出现一次或多次。最后一个“.”的后面是域名后缀(如com、net、org或者是数字等)。

(3)在出现地址后,还可能出现更多的目录,有的地址中会有“~”符号。

(4)有时候链接地址后会带上参数,如?name=john&sex=male等。

根据以上分析,可以确定url的正则表达式为:

/http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\’:+!]*([^\”\”])*/

在PHP中查询一个url地址的方法为:

$pattern=” http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\’:+!]*([^\”\”])*”;

$string=”www.省略”;

if(preg_match($pattern,$string)){

//匹配正确

}

3.2 检验密码及邮件格式的正确性

如果密码的格式要求如下:第一个字符必须是字母,密码最少有6个字符且不能超过15个字符,密码不能包含除字母、数字和下划线以外的字符。

描述这个密码格式的正则表达式是:

\^[a-zA-Z]\w{5-14}$

在PHP中,检验密码格式是否正确的过程可以写在一个函数。

function TestPassword($strPass){

$pattern=”^[a-zA-Z]\w{5-14}$”;

if(preg_match($strPass)){

return true;

}else{

return false;

}

}

邮件地址验证也是动态网页设计中一个常见问题,用正则表达式来检验也可以简单的实现。

Function TestEmail($strEmail){

$pattern=”^\w+@[a-zA-Z]+?\.[a-zA-Z]{2,3}$”;

if(preg_match($strEmail)){

return true;

}else{

return false;

}

}

3.3 处理文本数据

动态网页设计中一个很重要的工作是从结构化文本,xml文档或非结构化文本中生成网页,使用正则表达式可以方便地完成这一工作。

例如从一个简单的结构化文本中生成网页,下面是一个文本示例:

姓名,学号,性别,说明

张三,123,男,喜欢篮球

李四,124,女,喜欢音乐

王五,125,男,爱足球

这个文件第一行是标题,在下面的数据行中,用逗号作为分隔符,解析这个文件按两步进行,首先将文件分成行,然后再在将各个记录按字段分割。

由于分割符是逗号,还要考虑如果字段中加入了逗号的情况:

刘七,145,男,喜欢篮球,足球

解析这个记录时会出现问题,因为最后一个字段包含了两个字段的内容,计算机不能分辩这种情况。为了防止这种问题的出现,可以在包含分隔符的字段中加上限定符,单引号就是常用的一种限定符,加上限定符后,该记录的内容如下:

刘七,145,男,’喜欢篮球,足球’

将其它各记录的最后一个字段也加上单引号,以便于统一的处理。

由此可以得出分析某行文本的正则表达式为:

/,(?=([^’]*’[^’]*’)*(?![^’]*’))/

这个正则表达式首先找一个引号,然后继续查找,检查逗号后面的引号数量是不是偶数,或者为0。即如果逗号后面的单引号数量是偶数,则这个逗号位于字符串外面。

下面根据前面的正则表达式可以写出一个函数,接受一个字符串参数,根据这个字符串参数中的逗号分隔符,单引号限定符分割字符串,返回结果为数组。

function SplitStr($strRecord){

$pattern=”,(?=([^’]*’[^’]*’)*(?![^’]*’))”;

$result=preg_split($pattern,$strRecord);

return $result;

}

除了处理结构化文本外,正则表达式在动态网页开发中,还经常用于对查找某此字符串,并对这些字符串作突出显示等。

例如,对某一段文本中的所有“PHP”单词进行突出显示,相关函数可以是:

function replaceStr($text){

$pattern=”\s+PHP\b”;

$aim=”$0”;

$newText=preg_replace($pattern, $aim,$text);

return $newText;

}

这里的正则表达式是在PHP作为一个单独的单词出现时,将它突出显示,函数返回的就是对应的文本。在动态网页设计中,利用这种搜索与替换功能,能够方便地为网站搜索程序加上突出显示关键词的功能,将这个例子进一步完善,也可以自动为网页中的某些关键词加入指向其它网页的超级链接或直接成为某一个搜索引擎的关键词。

4 结语

用正则表达式处理文本文件具有快速、自动的优点,能够节约大量的时间,在动态网页设计中灵活运用这一功能可以大大提高工作的效率。所以掌握正则表达式的运用是动态网页设计的重要能力。

[参考文献]

[1] 杜冬梅,许彩欣,苏健.浅谈正则表达式在web系统中的应用[J].计算机系统应用,2007,(8):87-90.

[2] 祈鸣鸣.浅析asp技术在动态网页技术中的应用[J].计算机与信息技术,2007,(18):67.

[3] 李昱,陈和平.正则表达式在数据库查询中的应用[J].计算机工程与设计,2006,(6):2303-2305.

[4] 张长富,黄中敏.javascript动态网页编程实例手册[M].海洋出版社,2005.

上一篇:汉字拼音库的制作 下一篇:略论数字时代摄影之“真实性”