regex - 如何捕获全局正则表达式替换中的每个匹配项?

标签 regex perl substitution

我意识到可以通过轻微的变通来实现这一点,但我希望有一种更简单的方法(因为我经常使用这种类型的表达)。

鉴于示例字符串:

my $str = "An example: sentence!*"

正则表达式可用于匹配每个标点符号并将它们捕获在数组中。
此后,我可以简单地重复正则表达式并替换匹配项,如下面的代码所示:
push (@matches, $1), while ($str =~ /([\*\!:;])/);
$str =~ s/([\*\!:;])//g;

是否有可能将其合并到 Perl 中的单个步骤中,其中替换在全局范围内发生,同时还保持对替换匹配的标签?

最佳答案

您可以嵌入代码以在正则表达式中运行:

my @matches;
my $str = 'An example: sentence!*';
$str =~ s/([\*\!:;])(?{push @matches, $1})//g;

但是对于这么简单的匹配,我只会分别进行捕获和替换。

关于regex - 如何捕获全局正则表达式替换中的每个匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61870156/

相关文章:

regex - 删除名称长于x的目录

windows - perl 中的 fork 实现

python - 如何在 Python sqlite3 中使用元组选择 WHERE IN VALUES?

python - 正则表达式:消除斜杠之间的所有数字

regex - 为什么我在 Windows 中运行的 Perl 程序在 Mac 上的 Mountain Lion 中无法运行?

regex - matlab:正则表达式和拆分,并选择一些单元格

java - 选择 anchor 标记而不是值的正则表达式

json - 如何使用 Perl 从文件中提取某些数据?

perl - 使用 if 条件的更好方法

python-sphinx - 用 reStructuredText (Sphinx) 替换文件名?