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