我需要一些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;

产生以下输出:

A加B
D加E
2加F
H加我
4加J
5加K

我想看到的是,已经匹配的字符可以在不同的上下文中出现在新的匹配中:

A加B
D加E
E加F
H加我
我加J
J加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;

输出:

C:\ Temp> b
'A加B'
'D加E'
'E加F'
'H加我'
我加J
'J加K'

关于regex - Perl正则表达式如何在下一场比赛中重复使用上一场比赛的一部分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1283306/

10-10 23:09