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

来源:互联网 发布:java 定义枚举 编辑:程序博客网 时间:2024/05/17 06:44
 

 

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

字符描述:

^符号匹配字符串的开头。例如:
^abc 与"abc xyz"匹配,而不与"xyz abc"匹配

$符号匹配字符串的结尾。例如:
abc$ 与"xyz abc"匹配,而不与"abc xyz"匹配。

注意:如果同时使用^符号和$符号,将进行精确匹配。例如:
^abc$ 只与"abc"匹配 

*符号匹配0个或多个前面的字符。例如:
ab* 可以匹配"ab"、"abb"、"abbb"等

+符号匹配至少一个前面的字符。例如:
ab+ 可以匹配"abb"、"abbb"等,但不匹配"ab"。

?符号匹配0个或1个前面的字符。例如:
ab?c? 可以且只能匹配"abc"、"abbc"、"abcc"和"abbcc"

.符号匹配除换行符以外的任何字符。例如:
(.)+ 匹配除换行符以外的所有字符串

x|y匹配"x"或"y"。例如:
abc|xyz 可匹配 "abc"或 "xyz",而"ab(c|x)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个英文字母)就不能通过检查。

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

以下是引用片段:
function VerifyWebSiteAddr ($strWebSiteAddr){ 
return (eregi ("^([_0-9a-z-]+.)+([0-9a-z-]+.)+[a-z]{2,3}$", $strWebSiteAddr)); 

我们知道,PHP程式的运行必须有服务器支持,如果您在自己的主页上想实现以上功能, 嵌入式脚本语言Javascript或许是好的选择。JavaScript中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回true或false。只须在HTML文档的<head>区域添加一段Javascript代码。

以下是引用片段:
< language="Javascript1.2"> 
function verifyAddress(obj){ 
var email = obj.email.value; 
var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/; 
flag = pattern.test(email); 
if(flag){ 
alert("您的 E-Mail 通过初步检查!"); 
return true;} 
else{ 
alert("不是合法的E-Mail 地址,请重新输入!"); 
return false;} 

</script>  

然后在网页中输入信息的表单域<form>标签区域内中加入一行如下代码:

以下是引用片段:
<onSubmit="return verifyAddress(this);">

原创粉丝点击