第9章 用正则表达式处理文本

2020-03-08  本文已影响0人  Hannahhao

1. 用s///进行替换操作

s///替换操作符:substitution,查找并替换功能。把存在变量中的匹配模式的那部分内容替换成另一个字符。



- 用/g进行全局替换

- 不同的定界符

s///的定界符和m//、qw//一样,只要重复三次即可。
如果有左右之分,就必须使用两对:一对包住模式,一对包住替换字符串。
s{fred}{barney};

- 替换操作的修饰符

/i, /x, /s 都可以用

- 绑定操作符

=~ 为绑定操作符

- 非破坏性替换

如果需要同时保留原始字符串和替换后的字符串怎么办?
先复制一份拷贝后再替换

my $original = "Fred ATE 1 RIB";
my $copy=$original;
$copy =~ s/\d+ ribs?/10 ribs/;

或者
my $copy=$original =~ s/\d+ ribs?/10 ribs/r;
/r:保留原来字符串变量中的值不变,而把替换结果作为替换操作的返回值返回。

- 大小写转换

\U转义符:将其后的所有字符转换成大写的
\L转义符:将其后的所有字符转换成小写的
\E:关闭大小写转换的功能

- 元字符转义

\Q:会把后续字符串中的所有元字符自动转义为本意字符。

2. split 操作符

split操作符:给定模式拆分字符串为一组列表。
my @fields = split / separator/, $string;


3. join函数

join函数:把片段连接成一个字符串。
my $result = join $glue, @pieces;

4. 列表上下文中的m//

5. 更强大的正则表达式

- 非贪婪量词

贪婪量词:按照左起最长原则尽可能地多匹配文本
非贪婪量词:越短越好。加一个问号“?”,就会在第一次找到合适的位置时结束。

元字符 意义
?? 匹配零个字符(没用)
*? 零个或多个,越短越好
+? 一个或多个,越多越好
{3,}? 至少3个,越短越好
{3,5}? 至少3个,最多5个,越短越好
{3}? 正好3个

- 更为别致的单词边界符

\b{wb}:它会觉得单引号后的t不是独立单词,应该和之前的部分一起成为一个单词
\b{sb}:推断某个标点符号是句子的末尾。

- 跨行模式匹配

传统的正则表达式都是匹配单行文本。但也可以处理多行文本。



- 一次更新多个文件

- 从命令行直接替换文件内容

perl -p -i.bak -w -e 's/randall/Randa/g' fred*.dat
-p #自动生成小程序
while (<>) {
print;
}
-w #警告
-i.bak #备份
- e # 后面跟的是可供执行的程序源代码
s/Randall/Randal/g #会被直接当初Perl程序代码
上一篇下一篇

猜你喜欢

热点阅读