查看原文
其他

Perl学习05之正则表达式

pythonic生物人 pythonic生物人 2022-09-11

"pythonic生物人"的第10篇分享



摘要

Perl中正则表达式基础使用。

目录



1、正则表达式基础知识
元字符(Metacharacters)
字符集
反斜线字符
单词相关字符
锚定
分组捕获和反向引用
特殊符号存储匹配内容

2、正则表达式使用之匹配

3、正则表达式使用之替换

4、参考资料 



正文开始啦


正则表达式(Regular Expressions),查看一个字符判定它“匹配”还是“不匹配”。


1、正则表达式基础知识

  • 元字符(Metacharacters)
. 匹配任意一个字符,\n除外
* 匹配前面那个字符0或多次
+ 匹配前面那个字符1次以上
?匹配前面那个字符0或一次
| 或者,匹配左边或右边内容

  • 字符集

[a-z] 匹配26个小写字母

[A-Z] 匹配26个大写字母

[a-zA-Z] 匹配大小写字母

[0-9] 匹配数字

[0-9a-zA-Z] 匹配数字字母


  • 反斜线字符

\s:匹配任意空白符,即 [\f\t\n\r ]

\S:匹配非空白字符

\d:匹配数字,等价于[0-9]

\D:匹配非数字,等价于[^0-9]


  • 单词相关字符

单词包含数字、字母和下划线,即[_0-9a-zA-Z]。

\b:匹配单词边界处的空字符

\B:匹配非单词边界处的空字符

\<:匹配单词开头处的空字符

\>:匹配单词结尾处的空字符

\w:匹配单词构成部分

\W:匹配非单词构成部分


  • 锚定

^:锚定匹配行首位置

$:锚定匹配行末尾位置

^$:空行


  • 分组捕获和反向引用

使用()对匹配内容进行分组并暂时保存,分组后会有分组编号(第一个()编号为1,第N个编号为N);
可以使用\N的方式反向引用这些编号对应的内容;
区分该括号是第几组方法:依次点算左括号序号;

例如,

$_ = "yabba dabba doo";if (/y(#第一组\1 (#第二组\2 .)(#第三组\3 .)\3\2) d\1/) { print "It matched!\n"; }


$N存储\N匹配的内容
$1,$2,$3......依次存储\1,\2,\3.......的内容
例如,re1.pl
#!/usr/bin/perl"abc11ddabc11" =~ /([a-z]*)([0-9]*)dd\1\2/;print "$1\t$2\n";

perl re1.pl

abc 11


  • 特殊符号存储匹配内容

$`:匹配内容前面的所有字符

$&:匹配内容;

$':匹配内容后面所有字符;

例如, match.pl

#!/usr/bin/perluse strict;use warnings;
my $string="Keeping having a Child heart!";if($string =~ m/ch/gi){ print "$`\n"; print "$&\n"; print "$'\n";}

perl match.pl

Keeping having a

Ch

ild heart!




2、正则表达式使用之匹配

  • 匹配操作符


=~ ,匹配到返回True,否则False;
语法:m/<regexp>/,m可省略,定界符号/可以自己设定为其它符号;
  • 匹配修饰符

改变正则表达式的匹配行为方法,m/<regexp>/模式匹配修饰符,常用修饰符如下。
i:忽略大小写
g:全局匹配,类似sed中的s'///g' g;
c:在开启g的情况下,如果匹配失败,将不重置搜索位置
m:多行匹配模式
s:让.可以匹配换行符"\n",也就是说该修饰符让.真的可以匹配任意字符
修饰符可连用,顺序随意



3、正则表达式使用之替换

语法:s/<pattern>/<replacement>/;

例如,replace.pl

#!/usr/bin/perluse strict;use warnings;my $string="She likes me!";$string=~s/likes/liked/g;print "$string\n";
$string=~s/e/E/;print "$string\n";
$string=~s/e/E/g;#加修饰符g全局替换print "$string\n";


perl replace.pl

She liked me!

ShE liked me!



4、参考资料 


https://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean/22944075#22944075https://www.cnblogs.com/f-ck-need-u/p/9648439.html




同系列文章

Perl学习01之标量数据

Perl学习02数组和哈希使用

Perl学习03之流程控制结构

Perl学习04之IO及文件读写


持续更新,欢迎您"关注"、"在看"、"分享"


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存