我需要一些Perl正则表达式帮助.以下代码片段:
use strict;
use warnings;
my $str = "In this example, A plus B equals C, D plus E plus F equals G and H plus I plus J plus K equals L";
my $word = "plus";
my @results = ();
1 while $str =~ s/(.{2}\b$word\b.{2})/push(@results,"$1\n")/e;
print @results;
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
A plus B D plus E 2 plus F H plus I 4 plus J 5 plus K
我想看到的是,已经匹配的角色可以出现在不同上下文中的新匹配中:
A plus B D plus E E plus F H plus I I plus J J plus K
如何更改正则表达式以获得此结果?谢谢---丹
一般建议:不要s///在需要时使用m//.具体在你匹配的东西.
答案是pos:
#!/usr/bin/perl -l
use strict;
use warnings;
my $str = 'In this example, ' . 'A plus B equals C, ' .
'D plus E plus F equals G ' .
'and H plus I plus J plus K equals L';
my $word = "plus";
my @results;
while ( $str =~ /([A-Z] $word [A-Z])/g ) {
push @results, $1;
pos($str) -= 1;
}
print "'$_'" for @results;
Run Code Online (Sandbox Code Playgroud)
输出:
C:\Temp> b 'A plus B' 'D plus E' 'E plus F' 'H plus I' 'I plus J' 'J plus K'
| 归档时间: |
|
| 查看次数: |
2298 次 |
| 最近记录: |