Franky's Blog

书山有路勤为径,学海无涯苦作舟……

Perl-模式匹配后无法再次匹配

今天在开发调试脚本时,发现Perl字符串在进行一次模式匹配成功后,再用相同的模式匹配不上,查询资料了解到:

Perl在进行全局匹配时,会记住匹配的位置,且在下一次匹配时继续从上一次匹配的位置往下匹配,不会从开头进行匹配。

问题代码:

 1#!/usr/bin/perl
 2
 3my $string = "u2";
 4
 5if($string =~ /u/gi){
 6    print "匹配成功!\n";
 7}else{
 8	print "匹配失败!\n";
 9}
10
11if($string =~ /u/gi){
12    print "再次匹配成功!\n";
13}else{
14	print "再次匹配失败!\n";
15}

输出结果:

匹配成功!

再次匹配失败!

测试代码1:

 1#!/usr/bin/perl
 2
 3my $string = "u1u2";
 4my $position;
 5
 6if($string =~ /u/gi){
 7	$position = pos $string;
 8    print "在位置[${position}]匹配成功!匹配字符${^MATCH} \n";
 9}else{
10	print "再次匹配失败!\n";
11}
12
13if($string =~ /u/gi){
14	$position = pos $string;
15    print "再次匹配在位置[${position}]匹配成功!匹配字符${^MATCH}\n";
16}else{
17	print "再次匹配失败!\n";
18}
19

输出结果:

在位置[1]匹配成功!匹配字符u

再次匹配在位置[3]匹配成功!匹配字符u

测试代码2:

 1#!/usr/bin/perl
 2
 3my $string = "u1u2u3";
 4my $position;
 5
 6while($string =~ /u/gi)
 7{    
 8    $position = pos($string);
 9    print "Position of 'u' in string: $position\n";
10}

输出结果:

Position of ‘u’ in string: 1

Position of ‘u’ in string: 3

Position of ‘u’ in string: 5


Share