正确的正则表达式会正确匹配吗?我想识别不以特定文本结尾的字符串(_array)。我试图使用负向前瞻但无法使其正常工作。 (注意显而易见的答案是反向(m {_array $}),但有一个原因我不想这样做)。 TIA
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
答案 0 :(得分: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
答案 1 :(得分: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