一連のファイルパスがあり、を含まないすべてのファイルパスを一覧表示したいと思いますx/y/z/
。もう1つの制約はprint if !m{x/y/z/}
、スクリプトに対する書き込み権限がないため、使用できないことです。スクリプトに正規表現パターンを(コマンドラインオプションとして)含めることができます。つまり、一致するものがすべて出力されます。
これが私の試みです。前にないすべての行を一致させようとしていx/y/z/
ます。
#!/usr/bin/perl
use warnings;
use strict;
while(<DATA>) {
print if m{(?<!x/y/z/).*};
}
__DATA__
x/y/z/a/b/x.cc
x/y/z/a/b/x.cc
x/y/z/a/b/x.cc
x/y/a/b/m.cc
x/y/a/b/m.cc
私の期待は、下の2つの文字列だけを印刷することですが、すべてを印刷します。しかし、パターンをに変更すると(?<=x/y/z/).*
、上位3つの文字列のみが出力されます。
x/y/z/a/b/x.cc
x/y/z/a/b/x.cc
x/y/z/a/b/x.cc
なぜそうなのか、そして正規表現を修正するにはどうすればよいですか?