我想在两种模式之间插入数字:
$s = 'id="" value="div"';
$s =~ s/(id=")(".*)/$1123$2/;
Run Code Online (Sandbox Code Playgroud)
当然我得到了错误和"value ="div"结果.预期的结果是id ="123"value ="div".
在替换中,我的意思是1美元,然后是123,然后是2美元,但不是1123美元,而是2美元.正则表达式中正确的替换是什么?我想在一个正则表达式中完成它.
谢谢.
Ala*_*avi 16
$s =~ s/(id=")(".*)/$1123$2/; # Use of uninitialized value $1123 in concatenation (.) or string
Run Code Online (Sandbox Code Playgroud)
虽然你期望它替代$1,但perl将其视为变量$1123.Perl无法知道你的意思$1.所以,你需要的限制variablisation到$1其指定为${1}:
$s =~ s/(id=")(".*)/${1}123$2/;
Run Code Online (Sandbox Code Playgroud)
在脚本的顶部包含以下内容始终是个好主意.它们将为您节省大量时间和精力.
use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)
例如,运行包含上述模块的脚本会导致错误消息:
Use of uninitialized value $1123 in concatenation (.) or string at /tmp/test.pl line 7.
Run Code Online (Sandbox Code Playgroud)
(忽略报告的脚本名称和行号.)它清楚地说明了perl的预期.
使用look-behind和look-ahead断言的另一种方法:
$s =~ s/(?<=id=")(?=")/123/;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3092 次 |
| 最近记录: |