Regex仅匹配第一个实例

Regex仅匹配第一个实例,regex,regex-greedy,Regex,Regex Greedy,由于某些原因,我无法使用惰性匹配 以下是文本- 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

由于某些原因,我无法使用惰性匹配

以下是文本-

 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”,即

我的正则表达式看起来像这样-

(apache)?
但它似乎不起作用——它匹配所有实例。怎么了

您的regex
(apache)
的意思大致是“匹配apache或不匹配apache”,因此它显然会匹配所有内容

您没有指定使用哪种编程语言或regex风格,但此regex将匹配包含单词apache:

当然,这将匹配所有包含apache一词的行,因此您可以使用您正在使用的编程语言仅获得第一个匹配

注意:如果您选择的正则表达式风格将换行符与点匹配,那么您可能需要进入多行模式并添加行首和行尾锚定,如下所示:

^.*apache.*$

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

因为“?”的意思是“找到这个问号前面的零或一个东西”。你不需要为此解析
ps
。查看系统上的
/var/run/apache2.pid
或类似内容。
.*apache.*
^.*apache.*$