正则表达式仅查找第一个匹配项

时间:2013-11-18 06:09:04

标签: regex search regex-lookarounds regex-greedy text-search

我有这样的文字: -

SOME text, .....
Number of successes: 3556
Number of failures: 22
Some text, .....
Number of successes: 2623
Number of failure: 0

我的要求是找到这种模式的第一次出现“成功次数:(\ d +)”,即成功次数:3556。 但是上面的表达式也会返回后续匹配。

我希望正则表达式为我做这个,不像在java中我可以使用循环来迭代。

任何人都可以帮助我使用只能找到第一次出现的正则表达式。

3 个答案:

答案 0 :(得分:7)

一种应该适用于任何语言的解决方案:

(?s)\A(?:(?!Number of successes:).)*Number of successes: (\d+)

<强>说明:

(?s)                      # Turn on singleline mode
\A                        # Start of string
(?:                       # Non-capturing group:
 (?!Number of successes:) # Unless this text intervenes:
 .                        # Match any character.
)*                        # Repeat as needed.
Number of successes:[ ]   # Then match this text
(\d+)                     # and capture the following number

live on regex101.com

答案 1 :(得分:0)

以防万一通过regexp执行此操作的要求并不是必需的,以下是Tim(仅使用regexp)的(好)方法的替代方法

awk ' $0~/Number of successes: [1-9][0-9]*/ { print $0 ; exit 0 ;}'

或者非常简单

grep 'Number of successes: [1-9][0-9]*' | head -1

我更喜欢awk,因为它会在它看到第一个匹配时退出,而第二个可以在它之后处理许多行(直到它接收到SIGPIPE或文件结尾)

答案 2 :(得分:0)

尝试将grep-m选项

一起使用
grep -m 1 'Number of successes: [0-9]\+' file