我正在研究正则表达式并且用
打击环视概念
和
语法很少。
在谷歌搜索后,我认为这是一个寻求帮助的正确论坛。 请帮助这个概念。
因为我不善于理解解释。 如果我有很多不同的例子可以理解,那就太好了。
对我来说,修饰符/e
和||
是正则表达式中的新内容请帮助我理解
真正的用途。下面是我的Perl脚本。
$INPUT1="WHAT TO SAY";
$INPUT2="SAY HI";
$INPUT3="NOW SAY![BYE]";
$INPUT4="SAYO NARA![BYE]";
$INPUT1=~s/SAY/"XYZ"/e; # /e What is this modifier is for
$INPUT2=~s/HI/"XYZ"/;
$INPUT3=~s/(?<=\[)(\w+)(?=])/ "123"|| $1 /e; #What is '||' is use for and what its name
$INPUT4=~s/BYE/"123"/e;
print "\n\nINPUT1 = $INPUT1 \n \n ";
print "\n\nINPUT2 = $INPUT2 \n \n ";
print "\n\nINPUT3 = $INPUT3 \n \n ";
print "\n\nINPUT4 = $INPUT4 \n \n ";
答案 0 :(得分:6)
/e
替换运算符的s///
修饰符将替换值视为Perl代码而不是字符串。例如:
$x = "5 10"
$x =~ s/(\d+) (\d+)/$1 + $2/e;
# $x is now 15
它不是用字符串“$ 1 + $ 2”替换$ x,而是评估Perl代码$1 + $2
- 其中$ 1是5
而$ 2是10
- 并将结果放入$ X
||
不是一个正则表达式运算符,它是一个普通的Perl运算符。它是逻辑或运算符:如果左侧是真值(不是0或''),则返回左侧,否则返回右侧。您可以在perlop中查找perl运算符。
答案 1 :(得分:3)
标准替换运算符如下所示:
s/PATTERN/REPLACEMENT/
匹配PATTERN的地方,将替换为REPLACEMENT。 REPLACEMENT被视为双引号字符串,因此您可以将变量放在那里,它就可以正常工作。
s/PATTERN/$var1/
您可以使用此功能在替换中包含匹配测试的部分。
s/PA(TT)ERN/$1/
然而,有时这还不够。也许你想要处理文本并运行一个子程序来计算替换是什么。这是一个非常人为的例子。假设您有包含浮点数的文本,并且您希望用整数替换它们。第一种方法可能如下所示:
#!/usr/bin/perl
use strict;
use warnings;
$_ = '12.34 5.678';
s/(\d+\.\d+)/int($1)/g;
print "$_\n";
当然,这不起作用。最终得到“int(12.34)int(5.678)”。但是,该字符串是您要运行的一段代码,以便获得正确的答案。这就是/ e选项的作用。它将替换字符串视为代码,运行它并使用输出作为替换。
将上面示例中的行更改为
s/(\d+\.\d+)/int($1)/ge;
给我们所需的结果。
现在你了解/我希望你不需要对||的解释。它只是您一直使用的标准或操作员。在你的例子中,它意味着“替换字符串是'123'或$ 1的内容'。当然,这没有多大意义,因为'123'总是如此,所以永远不会使用$ 1。也许你想要反过来 - $ 1或'123'。