Regex 如何使这个正则表达式变懒

Regex 如何使这个正则表达式变懒,regex,Regex,我有这个字符串: XXXX: 150: some texxt: long text 我只需要获取:之间的数字,就像本例中的:150: echo "$LINE" |sed -n 's/^.*\XXXX:\(.*\)\:.*/\1/p' 获取我的150:some texxt 我怎样才能让它懒惰并在第一场比赛中停下来 $ LINE='XXXX: 150: some texxt: long text' $ echo "$LINE" | sed -r 's@^[^:]+:([^:]+):

我有这个字符串:

XXXX:  150: some texxt: long text
我只需要获取
之间的数字,就像本例中的
:150:

    echo "$LINE" |sed -n 's/^.*\XXXX:\(.*\)\:.*/\1/p'
获取我的
150:some texxt

我怎样才能让它懒惰并在第一场比赛中停下来

$ LINE='XXXX:  150: some texxt: long text'

$ echo "$LINE" | sed -r 's@^[^:]+:([^:]+):.*@\1@g'
 150

解释

  • [^x]
    表示:排除x字符

我不确定这是否适用于您的情况,但此正则表达式将查找所有介于:个字符之间的数字

:\s*(\d+)\s*:
您将在捕获组1中找到该号码

另一种类似的方法是,您不需要查看捕获组,只需使用整个匹配项即可(看起来这个方法在Perl中不起作用):

(?术语为“非贪婪”:


它是通过在
*

之后添加一个
来实现的。对于他的要求,我认为您需要在括号中的。*之后加上“?”。我认为贪婪/懒惰意味着在找到第一个匹配项后停止。
:\s*(\d+)\s*:
(?<=:\s*)\d+(?=\s*:)
^.*?\XXXX:\(.*\)\:.*