怎么做这个正则表达式懒惰

时间:2012-11-30 19:18:59

标签: regex

我有这个字符串:

XXXX:  150: some texxt: long text

在这种情况下,我只需要获取::之间的数字,如:150:

    echo "$LINE" |sed -n 's/^.*\XXXX:\(.*\)\:.*/\1/p'

让我150: some texxt

如何让它变得懒惰并在第一场比赛中停止

3 个答案:

答案 0 :(得分:0)

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

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

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

<强>说明

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

答案 1 :(得分:0)

我不确定这是否适用于你的情况,但这个正则表达式会找到所有数字:字符。

:\s*(\d+)\s*:

您将在Capture Group 1中找到该号码。

另一种类似的方法,你不需要查看捕获组并简单地使用整个匹配(看起来这个在Perl中不起作用):

(?<=:\s*)\d+(?=\s*:)

答案 2 :(得分:0)

这个词是“非贪婪的”:

^.*?\XXXX:\(.*\)\:.*

通过在?

之后添加.*来实现