2014-06-26 51 views
1

場景:我需要檢查一個文件路徑是否包含特定的文件夾。如果是這樣,則不輸出,否則顯示錯誤消息。 如何使用perl正則表達式(input/regex/merge/flags)執行此條件輸出? 我走到這一步:Perl風格的正則表達式 - 條件輸出

例如路徑:bin/user/projects/prjx/src/lib/detail/file.txt TM_FILEPATH/(src)?(?(1)true|false)/$1/g然而,這是一個條件匹配,而不是一個條件輸出

編輯#1:我需要做在perl風格的正則表達式,而不是在Perl中。

回答

1

它被稱爲Conditional insertions

${TM_FILEPATH/(.*\/(src)?\/.*)+|(.+)/?1:#true:#false/i} 

${       
    TM_FILEPATH    // variable input 
    /      // delimiter 
    (.*\/(src)\/.*)   // find either a folder /src/ 
    +      // at least once 
    |      // or 
    (.+)     // consume the whole input 
    /      // delimiter 
    ?1:      // when match 1 is set 
    #true     // print this 
    :#false     // (optional) else print this 
    /      // delimiter 
    i      // flags 
}       

所以結構將基本上是這樣的:

${variable/(regex-pattern)+|(.+)/?1:yes-output:no-output/flags} 
1

假設你要檢查該文件夾是src

if ($filepath !~ m:(^|/)src(/|$):) { 
    print STDERR "Error message\n"; 
} 
+0

我需要使用perl風格的正則表達式來完成,而不是perl。我的不好,應該讓它更清楚。 – nonsensation

+0

@Serthy:只需使用regex'(^ | /)src(/ | $)'來測試文件路徑是否包含目錄。或者正則表達式不得不以某種方式生成錯誤消息? – jwodder

+0

是的,正則表達式本身應該做一個條件輸出 – nonsensation