2012-08-10 43 views
0

由於某種原因,我無法使用延遲匹配。正則表達式僅匹配第一個實例

這裏是文字 -

806 ?  Ss  0:00 /usr/sbin/apache2 -k start 
    823 ?  S  0:00 \_ /usr/sbin/apache2 -k start 
    824 ?  S  0:00 \_ /usr/sbin/apache2 -k start 
    825 ?  S  0:00 \_ /usr/sbin/apache2 -k start 
    826 ?  S  0:00 \_ /usr/sbin/apache2 -k start 
    827 ?  S  0:00 \_ /usr/sbin/apache2 -k start 

,我想匹配其有 「的Apache2」,即

806 ?  Ss  0:00 /usr/sbin/apache2 -k start 

我正則表達式只有第一行是這樣的 -

(apache)? 

但它似乎沒有工作 - 它匹配所有實例。怎麼了?

+0

因爲'?'意思是「找到零或一個在這個問號之前出現的東西。」 – godspeedlee 2012-08-10 10:29:52

+0

你不需要爲此解析'ps'。看看'/ var/run/apache2.pid'或類似的系統。 – derobert 2012-08-10 10:36:18

回答

1

你的正則表達式(apache)?意味着約「匹配任何一種阿帕奇而不是Apache」,因此它顯然會匹配一切。

你沒有說明具體的編程語言,或者你使用正則表達式的味道,但此正則表達式將匹配包含單詞阿帕奇一整排:

.*apache.* 

這當然比賽的所有的包含單詞apache的行,所以您需要使用您正在使用的編程語言才能獲得第一個匹配項。

注意:如果你選擇的正則表達式的味道匹配換行符用點,那麼你可能需要去的多模式併線與線錨年底開始,像這樣:

^.*apache.*$ 

(然後記得打開多行模式!)

相關問題