精通正则表达式二:Perl中正则表达式的基本应用

本文介绍Perl语言中正则表达式的使用方法,包括匹配与替换操作,详细解析了perl命令行工具的参数含义及使用场景,适合有一定编程基础的学习者。

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

本书的第二章主要讲的是在Perl语言中运用正则表达式,虽然以前没有接触过Perl语言,但作者的前提就是假设读者不会Perl语言,所以对于有一定编程基础的人来说读起来没有太大困难,关于Perl语言的简单入门,除了书上讲的,可以参考这篇:http://blog.youkuaiyun.com/zhangjikuan/article/details/52199059,本篇文章主要写一些与正则表达式有关的部分。

1.匹配

my $reply = "2412341dfas"; // 定义一个字符串
if($reply =~ m/^[0-9]+$/){ // 判断是否匹配
    print "only digits\n";
} else {
    print "not only digits\n";
}

可见,‘=~’ 用来连接欲搜索的字符串和‘m/…/’,‘m’是匹配的意思,斜杠中间则写正则表达式

2.替换

替换的话可以直接在终端运行,很方便

perl -p -i -e 's/abc/Ira/g' word.txt

参数解释

-p  对目标文件的每一行进行查找
-i  将替换的结果写回文件
-e  整个程序接在命令后面

单引号中的部分就是一个perl程序,‘s’与前面的‘m’想类似,代表替换,‘abc’代表匹配的内容,‘Ira’代表将匹配的内容替换为‘Ira’,‘/g’是一个参数,代表全局替换,不加的话只会匹配一行中第一个,如果这一行中后续还有的话不会替换掉。

末尾的参数

如前面的‘/g’一样,Perl中还提供了其他的一些参数:

g    全局替换
i    忽略大小写
e    将计算后的结果替代匹配的字符串
m    增强的行锚点
x    宽松排列,并允许出现以#开头标记的注释

前面两个好理解,对于参数‘e’,看下面这个例子:

my $x = "比例为24%";
$x =~ s!(\d+)%!$1/100!e; #先将第一组的内容除以100再替换

最后的结果是‘比例为0.24’,其中‘!’和前面‘/’的作用是一样的,其分隔符的作用,这样就可以避免转义除号。

对于第四个增强的行锚点,因为‘^’和‘$’通常匹配的不是逻辑行的开头和结尾,而是整个字符串的开头和结尾,什么意思呢?,比如我们将下面一段文本读入一个字符串中:

单引号中的部分就是一个perl程序,‘s’与前面的‘m’想类似,代表替换

‘abc’代表匹配的内容,‘Ira’代表将匹配的内容替换为‘Ira’,‘/g’是一个参数,代表全局替换

本来是有三行,但将它读取到字符串中后,‘^’和‘$’将只能匹配整个字符串的开头和结尾,即成了一行。更简单点说,就是在RegExr上,字符串是没有勾选multiline的情况,加上‘m’后,就成了勾选了multiline的情况。

对于参数‘x’,这这只是正则表达式的排版上的问题,正常来说正则表达式是紧密排列的,加上参数‘x’后,就可以像写代码一样写正则表达式了:

$text =~ s{
    \b
    #可以写注释,可以将正则表达式写在多行
    (
      regex1
      (
       regex2
      )
    )
    \b
    }{replacement}

这样增强了它的可读性,这里面的‘{’和‘}’与前面的‘/’的作用是一样的,都是其分隔的作用,这样做的好处是可以当正则表达式中需要用到‘/’的时候不用进行转义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值