gpt4 book ai didi

regex - Perl 正则表达式如何为下一场比赛重用前一场比赛的一部分?

转载 作者:行者123 更新时间:2023-12-01 09:26:49 27 4
gpt4 key购买 nike

我需要一些 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 plus BD plus E2 plus FH plus I4 plus J5 plus K

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

A plus BD plus EE plus FH plus II plus JJ plus K

如何更改正则表达式以获得此结果?谢谢 --- 丹

最佳答案

一般建议:不要在需要 m// 时使用 s///。具体匹配什么。

答案是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 plus B''D plus E''E plus F''H plus I''I plus J''J plus K'

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com