我有以下字符串:
foo.a = [10
20
30
40];
foo.b = 'foobar';
Run Code Online (Sandbox Code Playgroud)
我正在使用foo\.[ab]\s*=正则表达式.
我尝试匹配后面的所有行,直到一行包含某个字符.
第一个匹配应覆盖除最后一行之外的所有内容,因为该行包含等号.我尝试了很多(负面的)前瞻性的东西,但我无法弄明白.
bob*_*ble 11
你需要一个积极的前瞻.
foo\.[ab][\s\S]*?(?=\n.*?=|$)
Run Code Online (Sandbox Code Playgroud)
[\s\S]*?懒惰地匹配任何角色(?=\n.*?=|$)直到包含a的换行符在=前面或$后面.foo\.[ab]\s*=[\s\S]*?(?=foo\.[ab]\s*=)
Run Code Online (Sandbox Code Playgroud)
它匹配您想要的直到另一个foo.a =或foo.b =使用积极的前瞻。
演示: https: //regex101.com/r/xV9wL4/2
(foo\.[ab]\s*=)[\s\S]*?(?=(?1))
Run Code Online (Sandbox Code Playgroud)
这与上面的工作方式相同,但使用捕获组和对该捕获组的引用(通过(?1))来简化它
演示: https: //regex101.com/r/xV9wL4/3