我试图使用正则表达式只提取字符串的某些元素,我想最终只得到捕获的组.
例如,我想在类似(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只有一个捕获组交易,对不对?
如果您想要的只是匹配,则不需要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并指定一个数组来保存匹配结果,如文档中所示.