正则表达式仅匹配第一个实例
问题描述:
由于某种原因,我无法使用延迟匹配。正则表达式仅匹配第一个实例
这里是文字 -
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)?
但它似乎没有工作 - 它匹配所有实例。怎么了?
答
你的正则表达式(apache)?
意味着约“匹配任何一种阿帕奇或而不是Apache”,因此它显然会匹配一切。
你没有说明具体的编程语言,或者你使用正则表达式的味道,但此正则表达式将匹配包含单词阿帕奇一整排:
.*apache.*
这当然比赛的所有的包含单词apache的行,所以您需要使用您正在使用的编程语言才能获得第一个匹配项。
注意:如果你选择的正则表达式的味道匹配换行符用点,那么你可能需要去的多模式并线与线锚年底开始,像这样:
^.*apache.*$
(然后记得打开多行模式!)
因为'?'意思是“找到零或一个在这个问号之前出现的东西。” – godspeedlee 2012-08-10 10:29:52
你不需要为此解析'ps'。看看'/ var/run/apache2.pid'或类似的系统。 – derobert 2012-08-10 10:36:18