如何仅替换正则表达式中捕获的元素?

And*_*rew 1 php regex perl

我试图使用正则表达式只提取字符串的某些元素,我想最终只得到捕获的组.

例如,我想在类似(is|a)字符串上运行类似的东西"This is a test"并且只能返回"is is a".我现在可以部分执行的唯一方法是,如果我找到字符串的整个开头和结尾但不捕获它:

.*?(is|a).*? replaced with $1
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,只消除最终找到/捕获组之前的字符 - 最后找到的组之后的所有内容仍然存在.

is is a test.
Run Code Online (Sandbox Code Playgroud)

我如何"is is a"在PHP和Perl中仅隔离和替换捕获的字符串(以便最终得到)?

谢谢!

编辑: 我现在看到使用m//而不是s///,但是如何将其应用于PHP preg_match?在我真正的正则表达式我有几个捕获组,结果$1,$2,$3等等- preg_match只有一个捕获组交易,对不对?

Sin*_*nür 6

如果您想要的只是匹配,则不需要s///操作员.你应该用m//.如果以下示例不符合您的需求,您可能希望稍微扩展一下您的解释:

#!/usr/bin/perl

use strict;
use warnings;

my $text = 'This is a test';

my @matches = ( $text =~ /(is|a)/g );

print "@matches\n";
__END__

C:\Temp> t.pl
is is a
Run Code Online (Sandbox Code Playgroud)

编辑:对于PHP,您应该使用preg_match_all并指定一个数组来保存匹配结果,如文档中所示.