正则表达式:匹配多行,直到一行包含

时间:2016-02-12 15:29:46

标签: regex

我有以下字符串:

foo.a = [10
20
30
40];

foo.b = 'foobar';

我正在使用foo\.[ab]\s*= regex

我尝试匹配后面的所有行,直到一行包含某个字符。

第一场比赛应涵盖除最后一行之外的所有内容,因为该行包含等号。我用(负面的)预测尝试了很多东西,但我无法弄明白。

2 个答案:

答案 0 :(得分:6)

您需要积极的lookahead

foo\.[ab][\s\S]*?(?=\n.*?=|$)
  • [\s\S]*?匹配lazily任何字符
  • (?=\n.*?=|$),直到包含=的换行符提前或$结束。

See demo at regex101

答案 1 :(得分:0)

变体1

foo\.[ab]\s*=[\s\S]*?(?=foo\.[ab]\s*=)

使用积极的前瞻功能,它可以匹配您想要的内容foo.a =foo.b =

演示:https://regex101.com/r/xV9wL4/2

变体2

(foo\.[ab]\s*=)[\s\S]*?(?=(?1))

这与上述相同,但使用捕获组和对该捕获组的引用((?1))来简化它

演示:https://regex101.com/r/xV9wL4/3