2009-06-19 91 views

回答

1

你想返回的东西匹配一个或多个字符是什么,但:随后是:与第二个你想要做同样的事情,但以$取代它更换。

11

perldoc perlreref

[^:] 

是一个字符类,它比其他':'任何字符匹配。

[^:]+ 

表示匹配一个或多个这样的字符。

我不确定需要捕获圆括号。在任何情况下,

([^:]+): 

捕获一个或多个非冒号字符后跟一个冒号的序列。

+7

我以为第一个是鸡。第二种是头发不好的鸡,第三种是皱着眉头的人拿着一头坏头发的鸡。皱眉的人往往会弄乱数据集,特别是当他们有鸡时 - 所以能够找到它们并用不太破坏性的东西代替它们是一件好事! – daotoad 2009-06-19 21:11:38

+1

我想说最后一个更像是一个吃坏头发的鸡。 (insertfoodhere): – user105033 2009-06-22 20:37:14

3

第一个从一行中捕获冒号前面的部分,比如字符串“abc:foo”中的“abc”。更准确地说,它至少与冒号前面的一个非冒号字符(虽然尽可能多)匹配并将它们放入捕获组中。

第二个替代部分,虽然这个时候包括冒号由变量$replace的内容。

0
$line =~ /([^:]+):/; 

匹配任何不包含:之前:/

如果$行= “http://www.google.com”,它将匹配HTTP(变量$ 1将包含HTTP)

$line =~ s/([^:]+):/$replace/; 

这一次,替换变量内容匹配的值$替换

3

我可能误解了以前的一些答案,但我认为关于秒的疑惑ond的例子。它将而不是通过$替换仅替换捕获的项目(即,直到冒号的一个或多个非冒号)。它将用$replace替换所有([^:]+): - 冒号。 (取代上比赛,而不仅仅是捕捉动作。)

这意味着,如果你不包括$replace冒号(你想要的),你会得到位:

my $line = 'http://www.example.com/'; 
my $replace = 'ftp'; 
$line =~ s/([^:]+):/$replace/; 
print "Here's \$line now: $line\n"; 

输出:

Here's $line now: ftp//www.example.com/ # Damn, no colon! 

我不知道,如果你只是看示例代码,但你,除非你打算使用捕捉我不知道你真的想在这些例子。

如果您对正则表达式(或Perl)非常不熟悉,则应在尝试perldoc perlreperldoc perlretut之前查看perldoc perlrequick

4
$line =~ /([^:]+):/; 

=〜操作符被称为binding operator,它运行对一个标量值regexsubstitution或(在这种情况下$线)。至于正则表达式本身,()指定一个捕获。捕获将与他们匹配的文本放在特殊的全局变量中。这些变量被编号从1开始,并对应于括号中显示的顺序,所以给定的

"abc" =~ /(.)(.)(.)/; 

$1变量将包含"a",所述$2变量将包含"b",并且$3变量将包含"c"(如果你还没有猜到.匹配一个字符*)。 []指定一个字符类。字符类将匹配其中的一个字符,因此/[abc]/将匹配一个字符,如果它是"a""b""c"。字符类可以通过以^开头来取消。否定字符类匹配一个未列在其中的字符,因此[^abc]将匹配不是"a""b""c"(例如,"d"将匹配)的一个字符。 +被称为量词。量词告诉你前面的模式必须匹配多少次。 +要求模式匹配一​​次或多次。 (*量词要求模式匹配零次或多次)。 :对正则表达式引擎没有特别的意义,所以它只是一个字面意思:

因此,将这些信息放在一起,我们可以看到正则表达式将匹配一个或多个非冒号字符(将此部分保存为$1),后跟一个冒号。

$line =~ s/([^:]+):/$replace/; 

这是一个替代。替换有两个部分,正则表达式和替换字符串。正则表达式部分遵循与正常正则表达式相同的所有规则。替换部分被视为双引号字符串。替换替换掉regex匹配以更换,所以给出下面的代码

my $line = "key: value"; 
my $replace = "option"; 

$line =~ s/([^:]+):/$replace/; 

的$行变量将持有该字符串"option value"

您可能会感兴趣perldoc perlretut

*除了换行符,除非/ m选项被使用,在这种情况下,任何字符

1

perl的-MYAPE ::正则表达式::解释-e“打印YAPE ::正则表达式:: Explain->新匹配('([^:] +):') - > explain“

The regular expression: 

(?-imsx:([^:]+):) 

matches as follows: 

NODE      EXPLANATION 
---------------------------------------------------------------------- 
(?-imsx:     group, but do not capture (case-sensitive) 
         (with^and $ matching normally) (with . not 
         matching \n) (matching whitespace and # 
         normally): 
---------------------------------------------------------------------- 
    (      group and capture to \1: 
---------------------------------------------------------------------- 
    [^:]+     any character except: ':' (1 or more 
          times (matching the most amount 
          possible)) 
---------------------------------------------------------------------- 
)      end of \1 
---------------------------------------------------------------------- 
    :      ':' 
---------------------------------------------------------------------- 
)      end of grouping 
---------------------------------------------------------------------- 
相关问题