[前言]在我们编写WEB程序时经常会判断一个字符串的有效性如一个串是否是数字是否是有效的Email地址等等如果不使用
正则表达式那么判断的程序会很长并且容易出错如果使用正则表达式这些判断就是一件很轻松的工作了本文全面介绍正则表达式的
慨念格式并以在PHPASP中的应用实例增加读者的感性认识正则表达式的应用很广需要大家在学习和实践中不断的总结
正则表达式简介
简单的说正则表达式是一种可以用于模式匹配和替换的强有力的工具在网络编程中应用广泛如PHP脚本语言或是JavaScriptVBScript这样的客户端脚本语言都提供了对正则表达式的支持由此可见正则表达式已经超出了某种语言或某个系统的局限成为人们广为接受的概念和功能
正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式然后把匹配模式与数据文件程序输入以及WEB页面的表单输入等目标对象进行比较根据比较对象中是否包含匹配模式执行相应的程序
举例来说正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确如果通过正则表达式验证用户邮件地址的格式正确用户所填写的表单信息将会被正常处理反之如果用户输入的邮件地址与正则表达的模式不匹配将会弹出提示信息要求用户重新输入正确的邮件地址由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用在后面我们会举例详细介绍正则表达式形式一般如/love/其中位于\/\定界符之间的部分就是将要在目标对象中进行匹配的模式用户只要把希望查找匹配对象的模式内容放入\/\定界符之间即可为了能够使用户更加灵活的定制模式内容正则表达式提供了专门的\元字符\所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式较为常用的元字符包括\+\*?以及{}\或者\\\s\\S\\d\\w和\\W\等等为了能够方便用户更加灵活的设定匹配模式正则表达式允许使用者在匹配模式中利用[]界定匹配于某一个范围的字符而不局限于具体的字符
除了我们以上的元字符之外正则表达式中还具有另外一种较为独特的专用字符即定位符定位符用于规定匹配模式在目标对象中的出现位置较为常用的定位符包括\^\\$\\\\b\以及\\\B\
如果我们希望在正则表达式中实现类似编程逻辑中的\或\运算在多个不同的模式中任选一个进行匹配的话可以使用管道符\|\例如
正则表达式中还有一个较为常用的运算符即否定符\[ ^ ]\与我们前文所提到的定位符\^\不同否定符\[ ^ ]\规定目标对象中不能存在模式中所规定的字符串一般来说当\^\出现在\[]\内时就被视做否定运算符而当\^\位于\[]\之外或没有\[]\时则应当被视做定位符
最后当用户需要在正则表达式的模式中加入元字符并查找其匹配对象时可以使用转义符\\\\例如/Th\\*/该正则表达式将会与目
标对象中的\Th*\而非\The\等相匹配
正则表达式的语法规则和标记
现在我们正式进入则表达式的学习我会根据实例结合讲解正则表达式的用法看完后你就会觉得写UBB代码如此简单了只要你一步一步的跟着我学看完本文章后你就成为UBB高手了激动人心的就是你能写出自已的UBB标签来了再也不用到别人那里去拷贝现成的代码和模板了还好VBScritp给我们提供了\正则表达式\对象只要你的服务器安装了IEx就可以运行了
字符描述
^符号匹配字符串的开头例如
^abc与\abcxyz\匹配而不与\xyzabc\匹配
$符号匹配字符串的结尾例如
abc$与\xyzabc\匹配而不与\abcxyz\匹配
注意如果同时使用^符号和$符号将进行精确匹配例如
^abc$只与\abc\匹配
*符号匹配个或多个前面的字符例如
ab*可以匹配\ab\\abb\\abbb\等
+符号匹配至少一个前面的字符例如
ab+可以匹配\abb\\abbb\等但不匹配\ab\
?符号匹配个或个前面的字符例如
ab?c?可以且只能匹配\abc\\abbc\\abcc\和\abbcc\
符号匹配除换行符以外的任何字符例如
()+匹配除换行符以外的所有字符串
x|y匹配\x\或\y\例如
abc|xyz可匹配\abc\或\xyz\而\ab(c|x)yz\匹配\abcyz\和\abxyz\
{n}匹配恰好n次(n为非负整数)前面的字符例如
a{}可以匹配\aa\但不匹配\a\
{n}匹配至少n次(n为非负整数)前面的字符例如
a{}匹配\aaa\\aaaa\等但不匹配\a\和\aa\
注意a{}等价于a+
a{}等价于a*
{mn}匹配至少m个至多n个前面的字符例如
a{}只匹配\a\\aa\和\aaa\
注意a{}等价于a?
[xyz]表示一个字符集匹配括号中字符的其中之一例如
[abc]匹配\a\\b\和\c\
[^xyz]表示一个否定的字符集匹配不在此括号中的任何字符例如
[^abc]可以匹配除\a\\b\和\c\之外的任何字符
[az]表示某个范围内的字符匹配指定区间内的任何字符例如
[az]匹配从\a\到\z\之间的任何一个小写字母字符
[^mn]表示某个范围之外的字符匹配不在指定范围内的字符例如
[mn]匹配除从\m\到\n\之间的任何字符
\\符号是转义操作符例如
\\n换行符
\\f分页符
\\r回车
\\t制表符
\\v垂直制表符
\\\\匹配\\\\
\\/匹配\/\
\\s任何白字符包括空格制表符分页符等等价于\[\\f\\n\\r\\t\\v]\
\\S任何非空白的字符等价于\^\\f\\n\\r\\t\\v]\
\\w任何单词字符包括字母和下划线等价于\[AZaz_]\
\\W任何非单词字符等价于\[^AZaz_]\
\\b匹配单词的结尾例如
ve\\b匹配单词\love\等但不匹配\very\\even\等
\\B匹配单词的开头例如
ve\\B匹配单词\very\等但不匹配\love\等
\\d匹配一个数字字符等价于[]例如
abc\\dxyz匹配\abcxyz\\abcxyz\等但不匹配\abcaxyz\\abcxyz\等
\\D匹配一个非数字字符等价于[^]例如
abc\\Dxyz匹配\abcaxyz\\abcxyz\等但不匹配\abcxyz\\abcxyz\等
\\NUM匹配NUM个(其中NUM为一个正整数)引用回到记住的匹配例如
()\\匹配两个连续相同的字符
\\oNUM匹配n(其中n为一个小于的八进制换码值)例如
\\o匹配制表符
\\xNUM匹配NUM(其中NUM为一个小于的十六进制换码值)例如
\\x匹配字符\A\
应用实例
在对正则表达式有了较为全面的了解之后就可以在PerlPHP以及ASP等程式中使用正则表达式了
下面以PHP语言为例使用验证用户在线输入的邮件地址以及网址的格式是否正确PHP提供了eregi()或ereg()资料处理函数实现字串比
对剖析的模式匹配操作ereg()函数的使用格式如下
ereg(patternstring)
其中pattern代表正则表达式的模式而string则是执行查找替换操作的目标对象如Email地址值本函式以pattern的规则来剖析比
对字串string找到则传回值为true函式ereg()与eregi()的区别就是前者区分大小写后者与大小写无关使用PHP编写的程序代码如下
<?php
if(ereg(\^([az_])+@([azZ_])+(\\[az_])+[az]{}$\$email))
{echo\您的EMail通过初步检查!\;}
else
{echo\不是合法的EMail地址请重新输入!\;}
?>
这个例子是可对使用者输入的EMail作简单的检查检查使用者的EMail字串是否有@字元在@字元前有小写英文字母数字或下\_\在@之后有数节字串最后的小数点后只能有二个或三个小写英文字母如webm就可以通过检查而(出现大写字母)和n(最后的小数点后只能超过个英文字母)就不能通过检查
我们通过调用自定义正规则判别函式也可以进行检查操作如下面的网址检验函式:
functionVerifyWebSiteAddr($strWebSiteAddr){
return(eregi(\^([_az]+)+([az]+)+[az]{}$\$strWebSiteAddr));
}
我们知道PHP程式的运行