在Perl中替换特定捕获组而不是整个正则表达式

flo*_*hei 5 regex perl replace capture-group

我有一个带有捕获组的正则表达式,它在更广泛的上下文中匹配我想要的.然后,我将捕获组$1用于满足我的需求.这很简单.

但是,s///当我只想用替代品替换内容而$1不是整个正则表达式时,如何使用捕获组?

谢谢!
-F

Bir*_*rei 16

据我了解,您可以使用不消耗字符的前瞻或后视.或者将数据保存在组中,只删除您要查找的内容.例子:

预见:

s/your_text(?=ahead_text)//;
Run Code Online (Sandbox Code Playgroud)

分组数据:

s/(your_text)(ahead_text)/$2/;
Run Code Online (Sandbox Code Playgroud)


Mor*_*kus 3

如果您只需要替换一个捕获,那么使用@LAST_MATCH_START@LAST_MATCH_END(与use English;参见perldoc perlvar)一起substr可能是一个可行的选择:

use English qw(-no_match_vars);
$your_string =~ m/aaa (bbb) ccc/;
substr $your_string, $LAST_MATCH_START[1], $LAST_MATCH_END[1] - $LAST_MATCH_START[1], "new content";
# replaces "bbb" with "new content"
Run Code Online (Sandbox Code Playgroud)