2012-08-10 147 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.*$ 

(然后记得打开多行模式!)

相关问题