2011-07-18 75 views
8

我想使用ack-is-better-than-grep(ACK)正則表達式找到我的代碼庫線和片段。我的理解是,ack使用Perl-derivative regular expressions,這是正確的嗎?確認與正則表達式 - 混淆,簡單的查詢

但是,我不知道如何將這些查詢工作:

ack 'foo' 
ack '.*(foo)+.*' 

ack '.*foo' 
ack 'foo.*' 

難道他們給不同的輸出?如果是這樣,爲什麼?

編輯:在我的測試中,他們輸出不同的結果(例如,第一個輸出比其他結果更匹配)。他們還突出了同一行的不同部分。

編輯2:輸出的差異顯然與突出顯示(輸出的着色)有關。我注意到,如果我運行ack--nocolor上述命令的輸出是相同的。顯然,使用默認着色運行ack會使部分輸出在我的機器/配置中不可見。我在Ubuntu 11.04中使用bash在GNOME終端上運行它。

+0

*不要*這些疑問給出不同的輸出?如果是這樣,你能舉個例子嗎?否則,你有什麼理由懷疑他們這樣做? –

+0

你是什麼意思第一個輸出更多的比賽?哪一行匹配1,但沒有匹配其他行? – NorthGuard

+0

感謝@Konrad和@inTide,我更新了問題以解決您的意見。 –

回答

10

我的理解是ack使用Perl派生正則表達式,這是正確的嗎?

是的。事實上,ack用Perl編寫,只是轉發表情內部發動機。

難道他們給不同的輸出?如果是這樣,爲什麼?

表達應該發現相同的結果。然而,輸出,因爲ack仍可能有所不同允許語法高亮顯示其輸出(默認情況下,除非--nocolor指定) - 它採用ANSI轉義符來輸出彩色命中,顯然'foo'將突出起來比'.*foo'不同的東西(和其他查詢)。

也就是說,在下面的輸入:

This is a foo test. 

'foo'查詢將突出這一點:「foo」,而'.*foo'將突出「This is a foo」。

+0

感謝@Konrad,它解釋了突出顯示的差異。但是我得到了不同的輸出,但是當我使用'--nocolor'選項運行它們時,它們輸出的結果相同。我認爲問題在於某些輸出中的ANSI轉義代碼存在問題,導致匹配不可見(其中一些輸出中有黑色空間) –