2

请问什么正则表达式可以正确匹配?

我想识别不以特定文本(_array)结尾的字符串。我试图使用负前瞻,但我无法让它工作。(注意,显而易见的答案是逆向 (m{_array$}),但我不想这样做是有原因的)。

 use strict;
 use warnings;
 while(<DATA>) {
    #
    ## If the string does not end with '_array' print No, otherwise print Yes
    m{(?!_array)$} ? print "No  = " : print "Yes = ";
    print;
 }
 __DATA__
 chris
 hello_world_array
 another_example_array
 not_this_one
 hello_world

我想要的输出应该是:

 No  = chris
 Yes = hello_world_array
 Yes = another_example_array
 No  = not_this_one
 No  = hello_world
4

2 回答 2

6

你需要消极的看待背后。即,您要搜索字符串的结尾没有放在前面_array

请注意,您需要chomp先行,因为$将在尾随换行符之前和之后匹配。

条件运算符旨在返回一个- 它不是if语句的简写。

use strict;
use warnings;

while (<DATA>) {
  chomp;
  # If the string does not end with '_array' print No, otherwise print Yes
  print /(?<!_array)$/ ? "No  = $_\n" : "Yes = $_\n";
}

__DATA__
chris
hello_world_array
another_example_array
not_this_one
hello_world

输出

No  = chris
Yes = hello_world_array
Yes = another_example_array
No  = not_this_one
No  = hello_world
于 2013-01-09T12:21:38.227 回答
2

试试这个:

while(<DATA>) {
    chomp;   # Remove linefeed
    #
    ## If the string does not end with '_array' print No, otherwise print Yes
    m{(?<!_array)$} ? print "No  = " : print "Yes = ";
    say;
}

输出:

No  =  chris
Yes =  hello_world_array
Yes =  another_example_array
No  =  not_this_one
No  =  hello_world
于 2013-01-09T12:21:27.787 回答