Perl正则表达式学习笔记
正则表达式以“m”进行匹配,简易模式的可以用“/.../”来撰写模式。可以使用m<...> 、m[],m{}...建议使用简易模式或m{},且m{}能够方便调试。
元符号
在正则表达式中具有特殊意义的符号。
“.”,通配符,匹配换行符(\n)以外的所有单个字符。只匹配一个字符。
反斜线是第二个元字符。
在正则表达式中想要使用这些元字符的本身的符号意义,必须在使用前加上反斜线,不然就是特殊意义。
量词
星号(*)会匹配它的前一项的0次或多次。
加号(+)会匹配它的前一项的1次或多次。
问号(?)会匹配它的前一项的0次或1次。
模式组
圆括号也是元符号。将括号内的元素视为一个单独的整体
择一模式
竖线(|)为“或”,表示左边匹配或右边匹配。
字符集
用方括号括起来的一连串可能的字符。只匹配单一字符,但可以是字符集中的任意一个。
字符集简写
0-9 \d
A-Za-z0-9_ \w“以普通字母,数字和下划线组成的word”,\w只是匹配单词里的一个字符,用匹配整个单词,要使用加号修饰符进行。
[\f\t\n\r] 换页,制表,换行,回车以及空格 \s,匹配单一字符,比较常见的用法是/s*来匹配任意数目的空白
在[]字符集中“^”表示反义
[^\d]非数字的字符 [\D]
[^\w]非单词的字符 [\W]
[^\s]非空格的字符 [\S]
选项修饰符
/i 进行不区分大小写的模式匹配
/s 匹配任意字符 将模式中的点好全部转换成[\d\D]
/x 加上空白 允许在模式中随意的加上空白
组合选项修饰符
组合使用s,i,x来达到想要的效果
锚点
插入符号(^)是用来标示字符串的开头的锚点,美元符号是($)是标示字符串的结尾的锚点。
单词的锚点
\b是单词的边界的锚点 用来匹配单词的头尾两端
\B非单词边界锚点
绑定操作符=~
匹配$_只是默认的方式
告诉拿右边的匹配左边的字符串
模式内的内插
匹配变量
圆括号不仅具有可以用来表示不同的分组,还能够启动正则表达式的记忆功能,他的记忆功能是把括号里的模式所实际匹配到的部分字符串暂时记下来,系统会根据括号的多少产生相应的标志变量,格式为$1,$2...如果在引用的时候超出了范围则是undef值。这些值会保存到下次匹配的成功时。
自动匹配变量
系统内置的变量,分别为$`,$&,$',三个的含义分别是前置的字符串,匹配的字符串和后置的字符串。
通用量词
* {0,}
+ {1,}
? {0,1}
优先级
1.括号(最高)
2.量词
3.锚点和序列
4.分隔用的竖线
注:量词在没有括号是只是匹配前面的一个字符
模式测试程序
While(<>) {
If (/your patter goes here/) {
Print "|$`<$&>$'";
}
Else {
Print "no match!";
}
}
以s///进行替换
以/g进行全局替换
大小写转换
\U转义字符会将其后的所有字符转换成大写
\L转义字符会将其后的所有字符转换成小写
\E关闭大小写的转换的功能
\l和\u只会影响之后的第一个字符
组合使用 \u\L表示全部转小写,但第一个字母大写
split操作符
根据分隔符来拆分一个字符串
用法如下:
@fields = split /separator/,$string;
注释:split操作符将会以作为分隔符的模式扫过所指定的字符串,并且返回有该分隔符所分隔的一串字段。
Split会保留开头的空字段,但不会保留结尾的空字段
默认空白字符,等于以/\s+/为模式,但会省略开头的空字段。
my @fields = split;#等于split /\s+/,$_;
也可以使用空格来代替 split ' ',$String;
Join函数
将字符片段联合成一个字符串。
第一个参数是胶水,是字符串,不是模式,用来做各个字符串之间的粘合剂。
列表上下文中的m//
在列表上下文中使用模式匹配操作符(m//)时,如果模式匹配成功,则其所返回的列表内容是所有的内存变量的内容;如果匹配失败,则会返回空列表。
非贪心的量词
*,+都是贪心量词,它们匹配是最大的长度。
*?,+?是非贪心的量词,它们匹配最短的长度。
跨行的模式匹配
^和$这两个锚点原本代表整个字符串的头和尾。在模式加上/m修饰符之后,就可以让它们也代表换行符。代表的是每行的开头和结尾。
一次更新多个文件
特殊变量$^I
$^I不为空则是加在原文件名的后面产生一个新的文件就是改动原文件的备份文件。如果为空则是在原文件上进行改动。
不具记忆功能的圆括号
有时候我们会因为内存变量的个数太多而混乱,其实你不需要那么多,有的圆括号只是用来作模式的分组。
(?:内容)这就是不带记忆功能的圆括号。
点号默认不匹配换行符