正则表达式笔记——用正则表达式处理文本
Posted presentlife
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式笔记——用正则表达式处理文本相关的知识,希望对你有一定的参考价值。
1.用s///进行替换
该操作符左边应该是某个变量,未给出默认会是$_,整个替换操作返回的是布尔值。
2.修饰符/g用来全局替换,存在即替换。如:s/\s+/ /g。
3.无损替换
s///操作完成后返回的值是布尔值(0,1),加上修饰符/r之后,会保持原字符串变量中的值不变,而把替换结果作为替换操作的返回值返回。如:my$copy = $original =~ s/\d+ ribs?/10 ribs/r。
4.大小写转换(以下规则在双引号中依然适用)
\U转义符:将其后的所有字符转换为大写
\L转义符:将其后的所有字符转换为小写
\E,关闭其后的转换功能
\l,\u只影响紧跟的那个字符
5.split根据给定的模式拆分字符串
格式:my @fields = split /分隔符/, $string;
如:my @fields = split /:/, “abc:def:g:h”;#得到(“abc”, “def”, “g”, “h”)
6.join函数把片段接合成一个字符串
如:my $result = join $glue, @pieces。如:my $x = join “:”, 4, 6, 8, 10, 12;#$x为“4:6:8:10:12”。
7.列表上下文中的m//
相当于反过来用split,模式匹配的是想要留下的部分。
my $test = “I love you”;
my @words = ($test =~ /([a-z]+)/ig);
print “Result: @words\n”;
模式中有一对圆括号则在每次匹配成功时返回对应的捕获字符串。
8.非贪婪量词
每个贪婪量词都有一个非贪婪量词,如(+)对应(+?),除了表示一次或多次,还要求能匹配的字符串越短越好。
9.跨行的模式匹配
perl中表示多行文本的写法:
$_ = “I’m much better\nthan Barneyis\nat bowling,\nWilma.\n”;
print “Found ‘wilma’ at start ofline\n” if /^wilma\b/im;
10.一次更新多个文件
#! /usr/bin/perl -w
use strict;
chomp(my $date = `date`);
$^I = “.bak”;
While(<>){
s/^Author:.*/Author:huangsiyuan/;
s/^Phone:.*\n//;
s/^Date:.*/Date:$date/;
print;
}
$^I的默认值是undef,赋值为某个字符串之后,可以将此字符串作为<>打开文件的后缀(是不是会用到文件句柄?)。具体过程:将原始文件更名为.bak文件,再创建一个与原来文件同名的文件用来接收修改过的内容。
11.从命令行直接编辑
$ perl -p -i.bak -w -e‘s/Randall/Randal/g’ fred*.dat
perl: #! /usr/bin/perl
-p: while (<>){
print;
}
(-n: 则没有这个print)
-i.bak: $^I = “.bak”;
-w: 开启警告
-e: 后面是可供执行的程序代码,放在循环中print前面
fred*.dat: 命令行参数,匹配此文件名模式的所有文件名都参与进来
这一个知识点可以和上一个知识点做一下比较。
以上是关于正则表达式笔记——用正则表达式处理文本的主要内容,如果未能解决你的问题,请参考以下文章