Regex:Lookaround&&;一些语法
我正在学习正则表达式,对Regex:Lookaround&&;一些语法,regex,perl,Regex,Perl,我正在学习正则表达式,对 环视概念 及 几乎没有语法 在谷歌搜索之后,我认为这是一个寻求帮助的合适论坛。 请帮助理解这个概念 因为我不太理解这个解释。 如果我有很多不同的例子可以理解,那就太好了 对我来说,修改器/e和|在正则表达式中是新的,请帮助我理解 真正的用途。下面是我的Perl脚本 $INPUT1="WHAT TO SAY"; $INPUT2="SAY HI"; $INPUT3="NOW SAY![BYE]"; $INPUT
/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 ";
$INPUT1=“说什么”;
$INPUT2=“打招呼”;
$INPUT3=“现在说![再见]”;
$INPUT4=“SAYO NARA![再见]”;
$INPUT1=~s/SAY/“XYZ”/e;#/这个修饰语是做什么用的
$INPUT2=~s/HI/“XYZ/;
$INPUT3=~s/(?读取和
s//
替换运算符的/e
修饰符将替换视为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运算符。它是逻辑or运算符:如果左侧是真值(不是0或“”),则返回左侧,否则返回右侧。您可以在中查找Perl运算符。读取和
s//
替换运算符的/e
修饰符将替换视为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运算符。它是逻辑or运算符:如果左侧是真值(不是0或“”),则返回左侧,否则返回右侧。您可以在中查找Perl运算符。标准替换运算符如下所示:
s/PATTERN/REPLACEMENT/
#!/usr/bin/perl
use strict;
use warnings;
$_ = '12.34 5.678';
s/(\d+\.\d+)/int($1)/g;
print "$_\n";
在模式匹配的地方,它被替换为REPLACEMENT。REPLACEMENT被视为一个双引号字符串,这样您就可以将变量放入其中,它就可以正常工作了
s/PATTERN/$var1/
您可以使用此选项在替换中包含匹配测试的片段
s/PA(TT)ERN/$1/
但是,有时这还不够。也许您需要处理文本并运行子例程来确定替换内容。下面是一个精心设计的示例。假设您有包含浮点数的文本,并希望将其替换为整数。第一种方法可能如下所示:
s/PATTERN/REPLACEMENT/
#!/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/PA(TT)ERN/$1/
将上面示例中的行更改为
s/(\d+\.\d+)/int($1)/ge;
为我们提供所需的结果
既然您理解了/e,我希望您不需要对| |进行解释。它只是您一直使用的标准或运算符。在您的示例中,它意味着替换字符串是'123'或$1的内容。当然,这没有多大意义,因为'123'总是为真的,所以永远不会使用$1。也许您希望它是另一种情况-$1或'123'。标准替换运算符如下所示:
s/PATTERN/REPLACEMENT/
#!/usr/bin/perl
use strict;
use warnings;
$_ = '12.34 5.678';
s/(\d+\.\d+)/int($1)/g;
print "$_\n";
在模式匹配的地方,它被替换为REPLACEMENT。REPLACEMENT被视为一个双引号字符串,这样您就可以将变量放入其中,它就可以正常工作了
s/PATTERN/$var1/
您可以使用此选项在替换中包含匹配测试的片段
s/PA(TT)ERN/$1/
但是,有时这还不够。也许您需要处理文本并运行子例程来确定替换内容。下面是一个精心设计的示例。假设您有包含浮点数的文本,并希望将其替换为整数。第一种方法可能如下所示:
s/PATTERN/REPLACEMENT/
#!/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/PA(TT)ERN/$1/
将上面示例中的行更改为
s/(\d+\.\d+)/int($1)/ge;
为我们提供所需的结果
既然您理解了/e,我希望您不需要对| |进行解释。它只是您一直使用的标准或运算符。在您的示例中,它意味着“替换字符串为'123'或$1的内容。当然,这没有多大意义,因为'123'总是为真的,所以$1永远不会被使用。也许您希望它是另一种情况-$1或'123'。@user:如果这回答了您的问题,礼貌地说“接受”通过单击答案旁边的复选框来选择此答案。它将变为绿色。[如果它没有完全回答您的问题,可以不回答。完全由您选择:)]+1表示答案正确,并补偿OP不费心回答的原因accept@user:如果这回答了你的问题,礼貌的做法是“接受”通过单击答案旁边的复选框,可以选择此答案。它会变绿的。[如果它没有完全回答您的问题,可以不回答。这完全是您的选择:)+1表示回答正确,并补偿不愿意接受的OP