【Perl】——6. 正则表达式
2021-02-07 本文已影响0人
lkj666
2021.2.6
持续更新中。。。
《Perl语言入门》
1. 正则表达式简介
正则表达式(regular expression, regex)是指用某种模式去匹配一类字符串的一个公式,类似其他工具中的查找和替换操作。
2. 正则表达式
2.1 量词
作用:指定匹配的次数
-
?
:匹配零次或一次 -
*
:至少匹配零次 -
+
:至少匹配一次 -
{m,n}
:匹配m到n次 -
{m}
:匹配m次
后面加上
?
就是非贪婪模式,例如??
。它会直接找最接近的符合条件的部分。
2.2 模式分组
作用:用()
将需要匹配的内容括起来,当成一个整体看待,后续可以进行反向引用(即将括起来的内容重新执行一遍)
-
()
:模式分组 -
\g{N}
:反向引用,N为左起第N个括号
2.3 择一匹配
作用:匹配两侧的某一侧
-
|
:任意匹配左侧或右侧
2.4 字符集
作用:常用字符串集合,但只匹配其中的某一个字符
-
[]
:匹配其中的一个字符 -
[0-9]
:匹配任意一个数字,等价于\d
2.5 锚位
作用:定位进行匹配的位置
-
\A
:匹配字符串的绝对开头,等价于^
-
\z
:匹配字符串的绝对结尾,等价于$
-
\b
:单词边界锚位
2.6 常用表达式:
-
\d+
:匹配任意数字 -
\s+
:匹配任意空白 -
.*
:匹配不包括换行符在内的任意字符 -
\d\D
:匹配任意字符 -
\w+
:匹配任意单词,这里的单词指数字、下划线和大小写字母 -
^\s+$
:匹配空白行
3. 用正则表达式进行匹配
- 匹配的形式:
m//
。通常可以省略m,加上m后,可替换成不同成对的定界符比如m# #
。 - 作用:相当于查找功能。
3.1 模式匹配修饰符
作用:在正则表达式末尾追加一些字符,调整模式的匹配行为。
-
/i
:大小写无关的匹配 -
/s
:匹配任意字符 -
/x
:加入辅助空白字符 -
/m
:对多行进行匹配,通常配合^、$
进行使用。
行首和字符串首的理解:对于人来说,换行符起到分割字符的作用,看起来就是多行的。但是对于Perl来说,整堆东西就是一个大的字符串。
3.2 绑定操作符
作用:指定要匹配某个模式的文本,左侧为文本,右侧为模式,Perl中默认匹配$_
变量中的内容。
=~
3.3 捕获变量
定义:捕获组会将正则表达式圆括号中匹配到的字符串保存到相应的变量,通常从$1
开始。
3.3.1 禁用圆括号的捕获功能
(?:模式)
3.3.2 自动捕获变量
-
$
`:匹配到区段的前部,等同于${^PREMATCH}
-
$&
:刚好匹配到的区段,等同于${^MATCH}
-
$'
:匹配到区段的后部,等用于${^POSTMATCH}
3.4 优先级
圆括号 > 量词 > 锚位和字符序列 > 择一 > 原子
4. 用正则表达式处理文本
替换的形式:s///
。通常可以省略s,加上s后,可采用不同成对的定界符。
作用:相当于替换功能。
4.1 修饰符
-
/g
:全局替换
模式匹配中的修饰符都可以用
4.2 常用表达式
-
\u\L
:后续字符转变为首字母大写,其余字符小写 -
\L
:后续字符全部转换为小写
4.3 元字符转义
-
\
:反斜线后的元字符只保留字符意义 -
\Q...\E
:\Q
到\E
之间的所有元字符只保留字符意义
4.4 与正则相关的操作符
-
split
操作符
按照`:`切割标量成数组
my @fields = split /:/, $string;
-
join
函数
用“:”将数组连接成一个标量
my $result = join ":", @pieces;