正则表达式笔记——用正则表达式处理文本

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: 命令行参数,匹配此文件名模式的所有文件名都参与进来

   这一个知识点可以和上一个知识点做一下比较。

以上是关于正则表达式笔记——用正则表达式处理文本的主要内容,如果未能解决你的问题,请参考以下文章

《正则表达式必知必会》读书笔记

Linux学习笔记 第八章 文本处理工具与正则表达式

第六章,文本处理工具和正则表达式

javascript学习笔记-正则表达式-少写1000行代码的正则表达式

PYTHON笔记简单的网页爬虫:用正则表达式抓取关键信息

Linux篇 | 文本处理工具和正则表达式