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

正则表达式 – Perl替代操作符是做什么的?

我已经在Perl中编程了,多年以来,尽管只是偶然的是我的主要语言.因为我经常去几个月没有写任何perl,我严重依赖我的狗耳朵的骆驼书,提醒我如何做的事情.但是,当我无意识地复制食谱时,这使我烦恼.这是最令人烦恼的一个:在第三版骆驼的第154页,有一个例子,“修改string en passant,其内容如下所示:
($lotr = $hobbit) =~ s/Bilbo/Frodo/g;

Q1)这里发生了什么?正是这个正则表达式正在运行?

Q2)这种基本操作是否需要这种近似魔法的语法,“从$a取一个字符串,用正则表达式修改它,将结果放在$b”?

Q3)如何使用循环认变量作为初始字符串进行此操作?

对于上述看似完美自然的Perl梦想家,提前道歉.

嗯…($lotr = $hobbit)=〜s / Bilbo / Frodo / g是Perl的众多魔术之一.现在给一些答案.

Q1)$lotr正在分配$hobbit中包含的值.分配后,我们可以忘记源变量.对待($lotr = $hobbit),因为它是自己的声明,如果我们写的:

$lotr = $hobbit;
$lotr =~ s/Bilbo/Frodo/g;

代替.正则表达式在$lotr上运行.

Q2)语法只是上面给出的代码段的一行版本.将它视为“将字符串从$a复制到$b,并使用正则表达式修改$b”而不是“从$a取一个字符串,将结果放在$b”

Q3)我假设你的意思是认模式搜索空间“循环认变量”?在这种情况下,只需使用$_而不是$hobbit:

while (<>) {
  chomp;
  ($lotr = $_) =~ s/Bilbo/Frodo/g;
  print "\$lotr = [$lotr]\n";
  print "\$_    = [$_]\n";
}

有趣的是,这个操作没有修改魔术var $_.这是你如何得出结论,赋值发生在正则表达式替换之前,并且替换不以任何方式在认模式空间上进行交互.

对于经验丰富的Perl程序员来说,我不知道有太多的Perl语法被抛出来,而不管他们盯着Schwartz先生呢?)

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

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

相关推荐