我想在两个模式之间插入数字:
$s = 'id="" value="div"';
$s =~ s/(id=")(".*)/$1123$2/;
当然,我得到了错误,结果是“ value= " div"。预期的结果是id="123" value="div"。
在替换中,我的意思是 1 美元,然后是 123 号,然后是 2 美元,但不是 1123 美元,然后是 2 美元。正则表达式中的正确替换是什么?我想用一个正则表达式来做。
谢谢。
$s =~ s/(id=")(".*)/$1123$2/; # Use of uninitialized value $1123 in concatenation (.) or string
尽管您希望它替代$1
,但 perl 将其视为变量$1123
。Perl 无法知道您的意思是$1
. 因此,您需要通过将变量$1
指定为${1}
:
$s =~ s/(id=")(".*)/${1}123$2/;
在脚本顶部包含以下内容始终是一个好主意。它们将为您节省大量时间和精力。
use strict;
use warnings;
例如,运行包含上述模块的脚本会导致错误消息:
Use of uninitialized value $1123 in concatenation (.) or string at /tmp/test.pl line 7.
(忽略报告的脚本名称和行号。)它清楚地说明了 perl 的预期。
使用后视和前瞻断言的另一种方法:
$s =~ s/(?<=id=")(?=")/123/;
另一种变体:
$s =~ s/(id=")(".*)/$1."123".$2/e;
使用示例:
$ cat 1.pl
$s = 'id="" value="div"';
$s =~ s/(id=")(".*)/$1."123".$2/e;
print $s,"\n";
$ perl 1.pl
id="123" value="div"