有一個perl腳本,需要處理給定目錄中某個類型的所有文件。這些文件應該是那些以.jup結尾的文件,而且不應該在文件名中包含「TEMP_」這個詞。 I.E.它應該允許correct.jup,但不允許TEMP_corrected.jup。需要特定的Perl正則表達式
已經嘗試了前瞻,但顯然有不正確模式:
/(?!TEMP_).*\.jup$/
這雖然返回整個目錄的內容,包括與任何擴展名的文件和那些含有TEMP_,如文件TEMP_corrected.jup 。
有一個perl腳本,需要處理給定目錄中某個類型的所有文件。這些文件應該是那些以.jup結尾的文件,而且不應該在文件名中包含「TEMP_」這個詞。 I.E.它應該允許correct.jup,但不允許TEMP_corrected.jup。需要特定的Perl正則表達式
已經嘗試了前瞻,但顯然有不正確模式:
/(?!TEMP_).*\.jup$/
這雖然返回整個目錄的內容,包括與任何擴展名的文件和那些含有TEMP_,如文件TEMP_corrected.jup 。
你想要的正則表達式爲:
/^((?!TEMP_).)*\.jup$/
的主要區別是,你的正則表達式不是在字符串的開頭固定,所以它匹配滿足你的標準的任何子 - 在這個例子,的TEMP_corrected.jup
,子串corrected.jup
和EMP_corrected.jup
都匹配。
(另一個區別是,將()
放在向前和.
的圓周上可以確保TEMP_不會在字符串的任何位置被允許使用,而不僅僅是在一開始就不允許使用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-28 20:12:22