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 に答える