如何在替换字符串中引用匹配顺序?

时间:2015-11-30 21:00:42

标签: regex windows perl

我正在寻找一种方法来在所有其他找到的字符串中键入被替换字符串的匹配顺序。例如,对于第一个匹配的字符串,值应该是1,对于第二个它是2 ...对于第n个它应该是n。我正在寻找的值是所有其他匹配字符串中匹配字符串的顺序。

我想要获得的示例

让我说我有这个原创内容......

<"BOY"(GUN)><"GIRL"(BAG)><"SISTERS"(CANDY)><"JOHN"(HAT)>

......我希望它被操纵成这样......

1
BOY
GUN

2
GIRL
BAG

3
SISTERS
CANDY

4
JOHN
HAT

我已经知道我需要<"(.*?)"\((.*?)\)>来匹配每个元素。对于替换代码,我认为我需要#MATCH ORDER REFERENCE#\n\$1\n$2\n

注意

  • 我在Windows上使用Perl。

1 个答案:

答案 0 :(得分:1)

使用/e修饰符评估替换。请参阅Regexp Quote-Like Operators

然后你可以在每次替换时增加一个计数器。

<强>代码

my $text = '<"BOY"(GUN)><"GIRL"(BAG)><"SISTERS"(CANDY)><"JOHN"(HAT)>';
my $counter = 1;
$text =~ s/<"([^"]+)"\(([^()]+)\)>/$counter++."\n$1\n$2\n\n"/ge;

print $text;

<强>输出

1
BOY
GUN

2
GIRL
BAG

3
SISTERS
CANDY

4
JOHN
HAT