概述
正则表达式(Regular Expression)用于匹配具有特定模式的字符串,然后对匹配上的字符串进行操作。Perl语言的正则表达式基本上是所有常用语言中最强大的,很多语言的正则表达式都参考Perl的正则表达式。
正则基础知识
- 元字符(Metacharacters)
. 匹配任意一个字符,n除外;
* 匹配0个或多个任意字符;
+ 匹配前面那个字符1次以上;
? 匹配前面那个字符0或一次;
| 或者,匹配左边或右边内容;
- 字符集
[a-z] 匹配26个小写字母
[A-Z] 匹配26个大写字母
[a-zA-Z] 匹配大小写字母
[0-9] 匹配数字
[0-9a-zA-Z] 匹配数字字母
- 反斜线字符
s: 匹配任意空白符,即 [ftnr ].
S: 匹配非空白字符
d: 匹配数字,等价于[0-9]
D: 匹配非数字,等价于[^0-9]
- 单词相关字符
单词包含数字、字母和下划线,即[_0-9a-zA-Z]
b: 匹配单词边界处的空字符
B: 匹配非单词边界处的空字符
<: 匹配单词开头处的空字符
>: 匹配单词结尾处的空字符
w: 匹配单词构成部分
W: 匹配非单词构成部分
- 锚定
^: 锚定匹配行首位置
$: 锚定匹配行末尾位置
^$:空行
- 分组捕获和反向引用
使用()对匹配内容进行分组并暂时保存,分组后会有分组编号(第一个()编号为1,第N个编号为N);
可以使用N的方式反向引用这些编号对应的内容;
区分该括号是第几组方法:依次点算左括号序号;
Perl正则表达式
- 在运用Perl的正则表达式时,有三种形式,匹配、替换、转化:
Perl匹配 m/.../
Perl 替换 s/.../.../
Perl 转写 tr/.../.../
- 上述三种形式都可以和=~或!~搭配使用,=~表示匹配,!~表示不匹配
- 如果左侧没有待处理的标量变量,则默认为处理$_变量中的内容
举例如下:
$str="I love Perl";
if ($str=~m/Perl/)
{
print "there exist a Perl in $str"."n";
}
if ($str=~s/Perl/Bash/)
{
print "replace Perl with BASH in $str"."n";
}
if ($str=~tr/A-Z/a-z/)
{
print "translate all lower cases to upper cases in $str"."n";
}
结果:
there exist a Perl in I love Perl
replace Perl with BASH in I love Bash
translate all lowwer case to upper case in i love bash
- 模式匹配有一些常用的修饰符,如:
i 忽略模式中的大小写
x 忽略模式中的空白
g 全局匹配
* 匹配0个或多个任意字符
+ 匹配 1 个或更多字符
? 匹配 0 或 1 个字符
| 用来匹配不同的模式
() 用于存储匹配的模式。
[] 可以传递一组字符。
^ 字符串的开头
$ 字符串结束
w 用于匹配单个字符或单词,可以是字母数字,包括 _
W 匹配除字母数字以外的任何内容
s 用于匹配空格
S 匹配除空格以外的任何内容
d 匹配数字。
D 匹配数字以外的任何内容。
n 匹配换行符
. 匹配包括空格在内的任何字符。
- perl处理匹配语句之后,会存在三个特殊变量名:
$`: 匹配部分的前一部分字符串
$&: 匹配的字符串
$': 还没有匹配的剩余字符串