正则表达:环顾四周&&一些语法

时间:2010-09-02 10:11:36

标签: regex perl

我正在研究正则表达式并且用

打击
  1. 环视概念

  2. 语法很少。

  3. 在谷歌搜索后,我认为这是一个寻求帮助的正确论坛。 请帮助这个概念。

    因为我不善于理解解释。 如果我有很多不同的例子可以理解,那就太好了。

    对我来说,修饰符/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 ";
    

2 个答案:

答案 0 :(得分:6)

阅读perlrequickperlretut

/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'。