Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex:Lookaround&&;一些语法_Regex_Perl - Fatal编程技术网

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