使用正则表达式时,需要使用两个字符串处理运算符:模式匹配运算符m//和替换运算符s///。此处还将附带介绍另一个密切相关的运算符,即转换运算符tr///,它进行一些简单的转换,但不使用正则表达式。
while($line=<>){
if($line =~ m/exit/i) {exit;}
}
说明:用=~运算符来指定m//运算符查找的字符串。
当使用//做界定符时m可省略,即m/exit/ 和/exit/等效。
但是使用自己规定的界定符时一定要带m,如m@exit@,m{exit},m=exit=(和m/exit/等效)。
$text = "Pretty young, but not very young.";
$text =~ s/young/old/;
print $text;
Pretty old, but not very young.
s///和m//一样可以将//替换为自己习惯的界定符。
m//和s///都是从左向右做匹配,一旦匹配成功则不往下继续执行匹配。
我们可以使用修饰符,使它们的功能更强大。下面列出一些常用的与m//和s///一起使用的修饰符:
i --- 忽略大小写
g --- 在全局范围内执行所有可能的操作
m --- 让^和$匹配换行符/n
x --- 忽略模式中的空白,并允许进行注释
s --- 让. 匹配新行
o --- 仅对模式进行一次编译
perl中在正则表达式中使用的特殊字符(使用时前面加上反斜线):
/D 匹配非数字字符
/d 匹配数字字符
/L 小写,直到遇到/E
/l 小写下一个字符
/n 换行
/r 回车
/S 匹配非空白字符
/s 匹配空白字符
/t 制表符
/U 大写,直到遇到/E
/u 大写下一个字符
/W 匹配非单词字符
/w 匹配一个单词字符(字母数字字符和“_”)
所有可用的perl量词:
* 匹配0词或者多次
+ 匹配1次或者多次
? 匹配1次或者0次
{n} 匹配n次
{n,} 匹配至少n次
{n,m} 匹配至少n次,但只多m次
断言(也称为锚),用来匹配字符串中的某些条件,非真实数据。
下面是一些合法的perl断言:
^ 匹配行首
$ 匹配行尾(或末尾前的新行)
/A 仅仅匹配字符串的开头
/B 匹配非单词边界
/b 匹配单词边界
/G 仅仅匹配前一个m//g剩余的内容(仅仅能和/g一起使用)
/Z 仅仅匹配字符串的末尾,或者末尾前的新行
/z 仅仅匹配字符串的末尾
perl中的元字符:
包括 / | ()[]{}^$*+?.
使用时,在它们面前加入反斜线/,就可以确保它们照字面意思解释,而不是做元字符用。