找回密码
 注册
查看: 4397|回复: 0

perl语言正则表达式模式内的内插

[复制链接]
发表于 2011-11-14 20:42:24 | 显示全部楼层 |阅读模式
正则表达式可以被内插,如同双引号字符串一样。。这允许我们快速地写出类似grep 的程序:
#! /usr/bin/perl –w
my $what = “larry”;
while(<>){
if(/^($what)/){ #在字符串前面进行匹配
print “We saw $what in beginning of $_;”;
}
当程序运行时,模式将被$what 的值代替。在本例中,它同使用/^(larry)/是一样的,在行的开头处查找larry。
如果没有在程序中具体指出$what 的值,也可以在命令行中输入,然后使用参数@ARGV:
my $what = shift @ARGV;
如果命令行中第一个参数是fred|barney,则模式为/^(fred|barney)/:在行首查找fred 或者barney◆。括号(在查找larry 的
例子中不是必须的)是非常重要的,如果没有它,则在行首查找fred,或在此行中任意位置查找barney。
◆机敏的读者知道在命令中通常不能输入fred|barney,因为竖线是shell 的元字符(shell metacharacter)。查看你的shell 文档,了解怎样将命
令行中的参数括起来。
使用上面的代码,可以通过@ARGV 来得到模式,现在的程序有点Unix 的grep 命令的味道了。但我们要小心元字符。
如果$what 的值为‘fred(barney’,这个模式是/^(fred(barney)/。上述模式是不能工作的,会由于错误使用正则表达式而使
程序垮掉。利用一些高级技术◆,你可以捕捉到这种错误(或者在开始时就阻止这些元字符),而不至于让程序垮掉。但
现在,只需知道如果用户被赋予正则表达式的强大能力,则他们有责任正确的使用它们。
◆可以使用eval 块来捕捉错误,或者使用quotemea(或者其等价形式:\Q)将内插部分引用起来,使之不会被当作正则表达式来处理。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 23:46 , Processed in 0.027443 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表