Perl的模式匹配

本文介绍了Perl中的基本模式匹配方法,包括m/pattern///和s/pattern/replacement///两种形式,并解释了如何使用特殊字符类进行匹配。此外还介绍了如何利用grep函数筛选数组中的元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Perl基本的模式匹配有两种:

m/pattern/        //只匹配
s/pattern/replacement/        //匹配并替换
其中分隔符反斜杠/可以用任意特殊字符替换(但在m/pattern/简写为/pattern/时不能这样做,换种说法,即若分隔符是反斜杠/,则m/pattern/可简写为/pattern/)

模式匹配若成功,则返回true,否则返回false

 

模式匹配默认的目标变量是$_,如

while(<FILEHANDLE>){
	print "match/n" if(/pattern/);
}

上面代码的作用是将文件的每一行与pattern匹配,若匹配成功,则打印输出match

 

若要指定模式匹配的目标变量,应使用运算符=~,若匹配则运算结果为true,否则为false,如

$a = "hello world";
print "match/n" if($a =~ /hello/);

s/pattern/replacement/在匹配成功后,会替换匹配的部分并赋给目标变量,如

$a = "hello world";
$a =~ s/hello/hi/;	//$a的值变为"hi world"

两个特殊模式:

  • 在模式匹配尾部加i可使匹配时忽略大小写,即/pattern/i
  • 在模式匹配尾部加g可使模式匹配中圆括号覆盖的部分被赋值给固有变量$1,$2,...(还有其他功能,此处略)


grep的格式如下

grep expression, list

grep迭代运行list中的每个元素,然后执行expression。在expression中,$_代表list中的元素。若expression返回为真,grep就返回该元素。如

@dogs = qw(greyhound bloodhound terrier mutt chihuahua);
@hounds = grep /hound/, @dogs;

上面代码中,@dogs是list,$_代表@dogs中的每个元素,通过模式/hound/匹配,若匹配成功,则grep返回这个元素,并添加到数组@hounds中

Tips:grep不一定要与模式匹配共用,如

@longdogs = grep length($_)>8, @dogs;

上面代码将@dogs中长度大于8的元素放在@longdogs中


Regular Expression中的特殊字符类

  • /w:一个单词字符,等价于[a-zA-Z0-9_]
  • /W:一个非单词字符
  • /d:一个数字,等价于[0-9]
  • /D:一个非数字
  • /s:一个空白字符,等价于[/t/f/r/n]
  • /S:一个非空白字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值