s/geed/good/
将会在目标对象中查找第一个出现的geed字串,并将其替换为good。如果我们希望在目标对象的全局范围内执行多次查找—替换操作的话,可以使用参数
“g”,即s/love/lust/g。
此外,如果我们不需要限制匹配的大小写形式的话,可以使用参数 “i ”。例如,
m/JewEL/i
上述正则表达式将会与目标对象中的jewel,Jewel,或JEWEL相匹配。
在Perl中,使用专门的运算符“=~”指定正则表达式的匹配对象。例如:
$flag =~ s/abc/ABC/
上述正则表达式将会把变量$flag中的字串abc替换为ABC。
下面,我们就在Perl程序中加入正则表达式,验证用户邮件地址格式的有效性。
代码如下:
#!/usr/bin/perl # get input print “What's your email address?\n”; $email = <STDIN> chomp($email); # match and display result if($email =~ /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/) { print(“Your email address is correct!\n”); } else { print(“Please try again!\n”); }
如果用户更偏爱PHP的话,可以使用ereg()函数进行模式匹配操作。ereg()函数的使用格式如下:
ereg(pattern, string)
其中,pattern代表正则表达式的模式,而string则是执行查找替换操作的目标对象。同样是验证邮件地址,使用PHP编写的程序代码如下:
<?php if (ereg(“^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+”,$email)) { echo “Your email address is correct!”;} else { echo “Please try again!”;} ?>
最后,我们在来看一下JavaScript。JavaScript
1.2中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回true或false。
我们可以使用JavaScript编写以下脚本,验证用户输入的邮件地址的有效性。
<html> <head> <script language="Javascript1.2"> <!-- start hiding 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(“Your email address is correct!”); return true; } else { alert(“Please try again!”); return false; } } // stop hiding --> </script> </head> <body> <input type="text" onBlur="verifyAddress(this)"> </body> </html>
一旦你有个包含了整个串的变量,你可以使用正则表达式,对整个文件进行操作,
而不是对文件中的某个块进行操作。有两个有用的正则表达式标记/s和/m。一般,Perl的 正则表达式对行进行处理,你可以这样写:
undef $/; $line = ; if ($line =~ /(b.*grass)$/) { print "found $1\n"; }
如果把我们的文件填入如下内容: browngrass
bluegrass
则输出为:
found bluegrass
它没有找到“browngrass”,这是因为$ 仅在串尾寻找其匹配, (或者在串结束 前的一行)。如果在包含很多行的串中,用"^"
和"$"来匹配,, 我们可以使用 /m ("multiline") 选项:
if ($line =~ /(b.*grass)$/m) {}
现在程序会把如下的信息输出:
found browngrass
类似地,句点可以匹配除了换行符之外的所有字符:
while () {
if (/19(.*)$/) {
if ($1 < 20) {
$year = 2000+$1;
} else {
$year = 1900+$1;
}
}
}
如果我们从文件中读入“1981”,$_ 将包含“1981\n”。正则表达式中的句点 匹配“8”和“1”, 而不匹配“\n”。这里正需要这样做,因为换行符不是日期的组成部分。对于一个包含很多行的串,我们也许要提取其中的大的块,这些块可能会跨越行分隔符。 在这种情况下,我们可以使用 /s 选项,并用句点来匹配除了换行符以外的所有字符。
if (m{(.*?)}s) {
print "Found bold text: $1\n";
}
此处,我用了{}来表示正则表达式的起始和结束,而不用斜杠,所以,我就可以 告诉 Perl我正在匹配,起始字符为"m",结束字符为"s"。你
可以把/s 和/m 选项组合使用:
if (m{^(.*?)}sm) {
# ...
}
总结