正则表达式学习

- 匹配:m//(还可以简写为//,略去m)
-
替换:s///
- 转化:tr///
匹配m//
用来匹配文本,即用于搜索
模式匹配修饰符:
i:匹配时忽略大小写
g:全局匹配,默认情况下,正则表达式abc匹配abcdabc字符串的时候,将之匹配左边的abc,使用g将匹配两个abc
c:在开启g的情况下,如果匹配失败,将不重置搜索位置
m:多行匹配模式
s:让.可以匹配换行符\n,也就是说该修饰符让.真的可以匹配任意字符
x:允许正则表达式使用空白符号,免得让整个表达式难读难懂,但这样会让原本的空白符号失去意义,这是可以使用\s来表示空白
perl处理完后会给匹配到的值存在三个特殊变量名:
- $`: 匹配部分的前一部分字符串
- $&: 匹配的字符串
- $': 匹配部分的后一部分字符串
#!/proj/perl use 5.010; my $name="aAbBcCaBc"; say $name; my $num = 0; say "\m\/ab\/gi"; while($name =~ m/ab/gi){ $num++; say "pre match : $`"; say "match : $&"; say "post match: $'"; } say "Cycle times: $num";
在开启了g全局匹配后,perl会在每次匹配成功后记下匹配的偏移位置,以便下次匹配时可以从该位移处继续向后匹配。每次匹配成功后的位移值,都可以通过pos()函数获取。偏移值从0开始算,0位移代表的是第一个字符左边的位置。如果本次匹配导致位移指针重置,pos将返回undef。
my $name="123ab456"; $name =~ m/\d\d/g; # 第一次匹配,匹配成功后记下位移 say "matched: $&, pos: ",pos $name; $name =~ m/\d\d/g; # 第二次匹配,匹配成功后记下位移 say "matched: $&, pos: ",pos $name;
matched: 12, pos: 2
matched: 45, pos: 7
摘自:全局匹配 - Perl入门秘籍 (junmajinlong.com)
替换s///: s/pattern/replacement/
替换操作修饰符
i:取消大小写敏感
g:全局替换,替换的返回值是替换成功的次数(数量)
【待补充】
#!/proj/perl $string = "hello world"; $string =~ s/world/world!/; print "$string\n";
结果:hello world!
#!/proj/perl $string = "hello world"; $string =~ s/WORLD/world!/i; print "$string\n";
结果:hello world!
#!/proj/perl my $str = "junmajinlong"; print "$str\n"; $str =~ s/(jin.*)/ $1/; print $str;
结果:
junmajinlong
junma jinlong
转化tr///
tr/pattern/replacement/
转化操作符:
s:将多个连续相同的字符缩写输出一个;
如大小写转换:
#!/proj/perl $string = "hello worldddd"; $string =~ tr/a-z/A-Z/s; print "$string\n";
结果:HELO WORLD
普通字符:
[ABC] 匹配 [...] 中的所有字符
[^ABC] 匹配非[...]中的所有字符
[A-Z] 匹配A至Z的所有字符
[\s\S] 匹配所有:\s指匹配所有空字符;\S指匹配所有非空字符
\w 匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
非打印字符:
\f 匹配一个换页符
\n 匹配一个换行符
\r 匹配一个回车符
\s 匹配任何空白字符
\S 匹配任何非空白字符
特殊字符:
【待补充】
限定符:
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或者多次。
? 匹配零次或者一次。
{n}
{n,}
{n,m}
非贪婪:最小匹配
贪婪:尽量多匹配
其中,* 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。
贪婪:尽可能的匹配。
定位符(锚位)
^ 匹配输入字符串开始的位置
$ 匹配输入字符串结束的位置
\A 匹配字符串的绝对开头
\z 匹配字符串的绝对末尾
\Z 行末锚位,允许后面出现换行符\n
\b 匹配一个单词边界
\B 非单词边界
其他字符:
\
.
[xyz]
[^xyz]
\d
\D
【待补充】

浙公网安备 33010602011771号