【发布时间】:2022-01-20 10:55:27
【问题描述】:
我有几个捕获的正则表达式,显然捕获变量保留了最后一次有效捕获的值:
# Two scalars to use for regexp
$x = 'abc';
$y = 'def';
# first regexp
$x =~ /^(ab)/;
$x = $1;
# second regexp
$y =~ /^(de)/;
$y = $1;
print \"$x\n$y\";
输出是:
ab
de
这里是单行版本:
perl -e "$x='abc'; $y='def'; $x =~ /^(ab)/; $x=$1; $y =~ /^(de)/; $y=$1; print \"$x\n$y\";"
如果$y='def'改成$y='zdef':
perl -e "$x='abc'; $y='zdef'; $x =~ /^(ab)/; $x=$1; $y =~ /^(de)/; $y=$1; print \"$x\n$y\";"
输出是:
ab
ab
如果我想在$x=$1 之后设置$1=undef 以删除$1 中的当前值
perl -e "$x='abc'; $y='zdef'; $x =~ /^(ab)/; $x=$1; $1=undef; $y =~ /^(de)/; $y=$1; print \"$x\n$y\";"
输出是:
Modification of a read-only value attempted at -e line 1.
显然,捕获变量是无法更改的。
我想知道如何解决这个问题。我想要的结果是:
ab
..
其中.. 表示“空”。就像在这种情况下,第一个正则表达式是 undef ($x='zabc):
perl -e "$x='zabc'; $y='def'; $x =~ /^(ab)/; $x=$1; $y =~ /^(de)/; $y=$1; print \"$x\n$y\";"
..
de
【问题讨论】:
-
@Mustafa 我没有看到这个所以我没有结论。真诚地,我发现我的 SO 问题和解决方案更容易理解。
标签: regex perl capturing-group