微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在正则表达式中将$1与数字连接起来

我想在两种模式之间插入数字:
$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的预期.

使用look-behind和look-ahead断言的另一种方法

$s =~ s/(?<=id=")(?=")/123/;

原文地址:https://www.jb51.cc/regex/356844.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐