gpt4 book ai didi

regex - perl 匹配关键字并修改关键字

转载 作者:行者123 更新时间:2023-12-02 06:04:11 24 4
gpt4 key购买 nike

我先设置了一个环境变量X。

> setenv X "abc 12_3 abc"

然后我在 perl 中编写了一个正则表达式,试图匹配第一列和一个空格,其余字符串也在 $2 中。在这里我打印第一场比赛 $1

> echo $X|perl -lne '$_=~m/([^\s]*[\s])(.*)/;print $1'
abc

这里我打印第二个匹配 $2。

> echo $X | perl -lne '$_=~m/([^\s]*[\s])(.*)/;print $2'
12_3 abc

到目前为止,一切正常。现在我想到将第二个匹配中的所有下划线替换为空格

> echo $X | perl -lne '$_=~m/([^\s]*[\s])(.*)/;$2=~s/_/ /g;'
Modification of a read-only value attempted at -e line 1, <> line 1.

嗯,错误消息说 $2 是只读的。没关系。所以我将 $2 复制到某个临时变量 $temp。所以在复制它的罚款时,$1 和 $2 仍然存在,如下所示:

> echo $X | perl -lne '$_=~m/([^\s]*[\s])(.*)/;$temp=$2;print $1.$2'
abc 12_3 abc

现在我尝试用临时字符串 $temp 中的空格替换下划线。

> echo $X | perl -lne '$_=~m/([^\s]*[\s])(.*)/;$temp=$2;$temp=~s/_/ /g;print $1.$2'

>

我的问题是 $1 和 $2 去了哪里?即使我对 $temp 进行了更改,如果它更改 $2,至少 $1 发生了什么?

最佳答案

语句 $temp=~s/_//g 重置匹配变量;所以如果你想在新的匹配/替换之后使用 then,你必须将 then 存储在一个变量中......

关于regex - perl 匹配关键字并修改关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14138919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com