2016-03-02 66 views
0

Perl的正則表達式:匹配所有文件夾,除了考慮到這些文件夾名稱一定的子文件夾模式

locales/DE/en  
locales/FR/en 
locales/US/en 
locales/US/fr 
public 
test 
[...] 

我想除了第2點的模式相匹配的一切。根目錄中還有其他文件夾,以及locales文件夾中的其他子文件夾。我真的想排除一切locales/*除了locales/US

這適用於locales,但未能包括其他根文件夾。
/(locales)\/(US)/

有什麼想法?

+1

如果你允許的一切,用'^ * $',用超前的禁止'語言環境/(?: DE | FR)限制吧'開頭:['/^(?!語言環境\ /(:DE | FR)?)* $ /'](https://regex101.com/r/vF1fZ3/3)。 –

回答

0

,除了locales/US匹配任何,你可以使用負前瞻:

/^(?!locales\/US).*/m 

RegEx Demo

+0

我相信他希望跳過區域設置中的每個文件,即'locales/*',除了'locale/US'。 –

+0

基於此問題'這適用於語言環境,但未包含其他根文件夾.'我認爲OP只想排除'語言環境/美國' – anubhava

+0

他的正則表達式適用於'語言環境',所以他正在談論'public ','測試'作爲其他根文件夾。 –

1

您可以使用兩個正則表達式,而不是在一個混亂起來的。下面是一個嘗試:

my @folders = 
    qw (locales/DE/en locales/FR/en locales/US/en locales/US/fr public test); 

foreach (@folders) { 
    if (/^locales/) { 
     next if ($_ !~ /^locales\/US/); # skip everything except locales/US 
    } 
    print $_,"\n"; 
} 
相關問題