正则表达式仅匹配第一个实例

时间:2012-08-10 09:36:56

标签: 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
  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)?

但它似乎没有工作 - 它匹配所有实例。怎么了?

1 个答案:

答案 0 :(得分:1)

您的正则表达式(apache)?表示大约“匹配 apache 不是apache ”,因此它显然会匹配所有内容。

您没有指定使用哪种编程语言或正则表达式,但此正则表达式将匹配包含 apache 一词的整行:

.*apache.*

这当然会匹配所有包含单词 apache 的行,因此您可以使用您正在使用的编程语言来获取第一个匹配项

注意:如果您选择的正则表达式与带有点的换行符相匹配,那么您可能需要进入多行模式并添加行开头和行结束锚点,如下所示:

^.*apache.*$

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