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:\(.*\)\:.*