0

特定のディレクトリから特定のタイプのすべてのファイルを処理する必要があるperlスクリプトがあります。ファイルは.jupで終わるファイルである必要があり、ファイル名に「TEMP_」という単語が含まれていてはなりません。IEは、corrected.jupを許可する必要がありますが、TEMP_corrected.jupは許可しません。

先読みを試しましたが、明らかにパターンが正しくありません。

/(?!TEMP_).*\.jup$/

ただし、これにより、拡張子が任意のファイルや、ファイルTEMP_corrected.jupなどのTEMP_を含むファイルを含むディレクトリの内容全体が返されます。

4

1 に答える 1

2

必要な正規表現は次のとおりです。

/^((?!TEMP_).)*\.jup$/

主な違いは、正規表現が文字列の先頭に固定されていないため、基準を満たすすべての部分文字列に一致することです。たとえば、の例でTEMP_corrected.jupは、部分文字列corrected.jupEMP_corrected.jup両方が一致します。

(もう1つの違いは()、先読みとを.確認することで、最初ではなく、文字列のどこにもTEMP_が許可されないようにすることです。それが重要かどうかはわかりません!)

ファイル以外の.jupファイルを取得している場合は、別の問題があります。式は.jupファイルとのみ一致する必要があります。次のコマンドで式をテストできます。

perl -ne 'if(/^((?!TEMP_).)*\.jup$/) {print;}'

次に、文字列を入力します。perlは、一致する場合はエコーバックし、一致しない場合はエコーバックしません。例えば:

$ perl -ne 'if(/^((?!TEMP_).)*\.jup$/) {print;}'
foo
foo.jup
foo.jup              <-- perl printed this because 'foo.jup' matched
TEMP_foo.jup
于 2010-06-28T20:06:18.793 に答える