Perl编程-6正则表达式--匹配

Posted oddxix

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Perl编程-6正则表达式--匹配相关的知识,希望对你有一定的参考价值。

perl语言的强大之处就在于他的正则表达式,Perl的正则表达式的三种形式,分别是匹配,替换和转化:

  • 匹配:m//(还可以简写为//,略去m)

    • 替换:s///

    • 转化:tr///

匹配

语法表示: m//    (m可以忽略不写)

#!/usr/bin/perl

$bar = "I am runoob site. welcome to runoob site.";
if ($bar =~ /run/){
   print "第一次匹配\n";
}else{
   print "第一次不匹配\n";
}

元字符

特殊字符叫做元字符,比如点号“.”,它是任何单字符的通配符,如果要表示点号本身需要在前面加上反斜杠“\”。

*:表示前面内容的零次或多次
+: 表示匹配前一个条目一次以上
?:表示前一个内容是可有可无的

模式分组

用圆括号()来表示分组,括号里的内容表示整体。使用圆括号可以对部分字符进行重新引用和反引用。“\1”、“\2”就是在使用反向引用,反斜线后面的数字和括号的组号匹配。

$_="abba";
if ($_=m /(.)\1/){
  print "It matched !"
}
#和bb匹配
$_ = "yabba dabba doo ";
if ($_=m /y(.)(.)\2\1/){
  print "It matched !"
}
#和abba匹配上

如何区分哪个括号是第几组?
只要数左括号的序号就可以

$_="yabba dabba doo";
if ($_=m /y((.)(.)\3\2) d\1/){
    print "It matched !"
}
#匹配到abba dabba

择一匹配

竖线(|)表示左边或者右边匹配都可以。

模式匹配修饰符

模式匹配有一些常用的修饰符,如下表所示:



正则表达式变量

perl处理完后会给匹配到的值存在三个特殊变量名:

$`: 匹配部分的前一部分字符串
$&: 匹配的字符串
$': 还没有匹配的剩余字符串

锚位

脱字符(^)表示字符串的开头
美元符($)表示字符串的结尾
\b 表示单词边界锚位,匹配任何单词的首尾
\B表示非单词边界锚位

绑定操作符=~

默认情况下模式匹配的对象是$_,绑定操作符=~则可以用右边的模式匹配左边的字符串。

捕获变量

使用圆括号表示不同的模式组时,也启动了正则表达式处理引擎的捕获功能,有几个括号就进行几次捕获,捕获的内容暂存在2变量中,如果想关闭圆括号的捕获功能,则使用(?:)形式

以上是关于Perl编程-6正则表达式--匹配的主要内容,如果未能解决你的问题,请参考以下文章

perl编程:正则匹配

Perl 正则表达式匹配大型 Unicode 代码点

perl学习模式匹配与正则表达式

python 正则表达式 re模块基础

Perl - 正则表达式匹配的输出非常奇怪,确实

perl多个正则表达式匹配多行