正则表达式捕获一个模式加上一切后直到达到一个字符

时间:2017-01-02 07:26:40

标签: regex command-line grep

我想要一个正则表达式,每次+other出现时都会捕获,直到下一个逗号。

使用

(word),+(other)(word),(code),(word),(other)(code),(example)
(code),+(other),+(other)(code)(word)(example),(example),+(example)
+(code),(other)(code)(word),(code),(word)

我想返回

+(other)(word)
+(other)
+(other)(code)(word)(example)

我将使用的命令看起来像egrep -o '\+\(other).*,。 唯一的问题是这个正则表达式中的逗号不一定是下一个逗号。现在命令返回

+(other)(word),(code),(word),(other)(code),
+(other),+(other)(code)(word)(example),(example),

2 个答案:

答案 0 :(得分:1)

您使用,消费尽可能多的任意0个字符(包括.*,

要避免匹配,且仅匹配第一个,,请使用否定括号表达式[^,]并对其应用*量词:

 egrep -o '\+\(other\)[^,]*

[^,]*模式将匹配,以外的任何0+个字符。

答案 1 :(得分:0)

如果你的grep支持Perl兼容的正则表达式(PCRE),你可以使用非贪心匹配:

$ grep -Po '\+\(other\).*?,' infile
+(other)(word),
+(other),
+(other)(code)(word)(example),