概述
本书的第二章主要讲的是在Perl语言中运用正则表达式,虽然以前没有接触过Perl语言,但作者的前提就是假设读者不会Perl语言,所以对于有一定编程基础的人来说读起来没有太大困难,关于Perl语言的简单入门,除了书上讲的,可以参考这篇:http://blog.csdn.net/zhangjikuan/article/details/52199059,本篇文章主要写一些与正则表达式有关的部分。
1.匹配
my $reply = "2412341dfas"; // 定义一个字符串
if($reply =~ m/^[0-9]+$/){ // 判断是否匹配
print "only digitsn";
} else {
print "not only digitsn";
}
可见,‘=~’ 用来连接欲搜索的字符串和‘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}
这样增强了它的可读性,这里面的‘{’和‘}’与前面的‘/’的作用是一样的,都是其分隔的作用,这样做的好处是可以当正则表达式中需要用到‘/’的时候不用进行转义。
最后
以上就是清爽果汁为你收集整理的精通正则表达式二:Perl中正则表达式的基本应用的全部内容,希望文章能够帮你解决精通正则表达式二:Perl中正则表达式的基本应用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复