正则表达式学习

 

  •  匹配: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
【待补充】

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2021-11-11 15:19  bost  阅读(54)  评论(0)    收藏  举报