正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
Perl的正则表达式的三种形式,分别是匹配,替换和转换;
匹配:m// (还可以简写//,略去m)
替换:s///
转化:tr///
这三种形式一般都和=~ 或!~ 搭配使用,=表示相匹配,!表示不匹配。
1 匹配操作符
匹配操作符m//用于匹配一个字符串语句或者一个正则表达式,示例如下:
#!/usr/bin/perl
$bar="I am runoob site. Welcome to runoob site.";
if ($bar =~/run/){
print "第一次匹配\n";
}else{
print "第一次不匹配\n";
}
$bar = "run";
if ($bar=~/run/){
print "第二次匹配\n";
}else{
print "第二次不匹配\n";
}
执行以上程序,输出结果为:
第一次匹配
第二次匹配
模式匹配修饰符
i 忽略模式中的大小写
m 多行模式
o 仅赋值一次
s 单行模式
x 忽略模式中的空白
g 全局匹配
cg 全局匹配失败后,允许再次查找匹配串
2 正则表达式变量
perl处理完后会给匹配到的值存在三个特殊变量名:
&:匹配的字符串
$' : 还没有匹配的剩余字符串
实例:
#!/usr/bin/perl
$string = "Welcome to runoob site.";
$string = ~ m/run/;
print "匹配前的字符串:$`\n";
print "匹配的字符串:$&\n";
print "匹配后的字符串:$'\n";
执行以上程序输出结果为:
匹配前的字符串: welcome to
匹配的字符串: run
匹配后的字符串: oob site.
3 替换操作符
替换操作符s/// 是匹配操作符的扩展
s/PATTERN/REPLACEMENT/
实例
#!/usr/bin/perl
$string = "Welcome to google site.";
$string = ~s/google/runoob/;
print "$string\n";
执行以上程序输出结果为:
Welcome to runoob site.
4 转换操作符
实例:
将变量$string 中的所有小写字母转换为大写字母:
#/usr/bin/perl
$string = 'Welcome to runoob site.';
$string =~ tr/a-z/A-Z/;
print "$string\n";
执行以上程序输出结果为:
WELCOME TO RUNOOB SITE.
以下实例使用 /s 将变量 $string 重复的字符删除:
实例
#!/usr/bin/perl
$string = 'runoob';
$string =~ tr/a-z/a-z/s;
print "$string\n";
执行以上程序输出结果为:
runob
更多实例:
$string =~ tr/\d/ /c; # 把所有非数字字符替换为空格
$string =~ tr/\t //d; # 删除tab和空格
$string =~ tr/0-9/ /cs # 把数字间的其它字符替换为一个空格。