正则表达式

Perl内建了正则表达式引擎(engine),可以根据你使用正则表达式描述的模式(pattern),来匹配你指定的数据(通常是文本),正则表达式引擎还支持捕获(capturing)和替换(replace)等功能。具体而言,正则表达式所处理的对象是字符串,它可以帮助我们完成以下几类工作:

1.确认字符串是否匹配了某种模式。

2.把字符串中匹配了某种模式的内容捕获出来。

3.把字符串中匹配的内容替换成指定的内容。

匹配的基本过程

$str =~ /regular expression/
my $str1 = "aBcABC";
if ( $str1 =~ /AB/ ){
    print "match\n";
}
else {
    print "unmatch\n" ;
}
exit 0;

匹配

普通字符:大部分的字符都没有特殊含义,就是他本身的含义。

元字符:12个特殊字符:

        * + ? . ( ) [ { ^ $ | \

分组和捕获

圆括号()完成分组和捕获的功能

分组并捕获

实例:

my $str = "module xyz (something)";
if ( $str =~ /^module\s+(\S+)/){
    print "module name is: ",$1,"\n";
}

exit 0;

Perl预设了9个变量:$1\$2\$3---来存放最多9组()捕获的内容。

请看实例:

my $str = "to be or not to be,it's a question.";
if ($str =~/^((\S+)\s+(\S))\s+(\S+)\s+((\S+)\s+(\S+)\s+(\S+))\s+(.+)/){
    for my $n( 1..9 ) {
        print "\$$n is: ${$n}\n";
    }

}

exit 0;

匹配的特点

匹配模式的两个特点

1.尽可能匹配更多

2.匹配达成后就结束

use strict;

my $str = "to be or not to be, it's a question.";
if ( $str =~ /(.+)/ ){
    print "matched is:",$1,"\n";
}

exit 0;

会输出:matched is: to be or not to be, it's a question.

这是因为“+” 和“*”都有“贪婪”的特点,尽可能多的匹配更多的字符。

我们可以利用后置?来约束+ *。使它们尽量减少匹配。

分组不捕获

可以使用(?:)仅分组,不捕获。

my $str = "module xyz (something)";
if ($str =~ /^(?:module)\s+(\S)/ ){
    print "module name is \:",$1,"\n";
}

exit 0;

(?:)形式,仅分组,不捕获。

替换

$str = "abcde";
$str =~ s/bcd/BCD/ ;#now $str is: aBCDe

 在替换部分可以引入外部变量,一般是my声明的变量:

$replace = "BCD";
$str = "abcde";
$str =~ s/bcd/$replace/ ; #now $str is :aBCDe

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值