如何以非贪婪的方式从许多实例中正则表达式匹配“{ * various * strings * }”?

How to regex match "{ * various * strings * }" out of many instances in a non-greedy way?

我正在努力想出适合这里的东西。

环境:Windows10(64 位)上的 Notepad++ 7.8.7(32 位),使用 regex101.com

进行一些测试

我有一个包含一大堆这样的游戏配置文件:

{ apple
banana
cherry 
}
{ banana
cherry
grape
}
{ cherry
grape
apple
orange
cherry
grape
}
etc., etc.

我需要匹配单独出现的 { * specific * words * },其中 * 不包含 {}(即单数括号块应被视为单个匹配项,并且任何匹配项都不应包含一个以上的方括号块)。没有嵌套的括号,让事情变得更简单。

所以在上面的例子中,我想匹配 { * apple * }{ * apple * cherry * } 之类的东西,它们会匹配第一个和第三个括号块,但不会匹配第二个。

我已经尝试了很多类似 (?s){.+?apple.+?} 的变体,但它们都没有匹配,有错误或超时 regex101.com(即使有延长的超时),或者太贪婪,忽略括号块之间的边界。

非常感谢任何见解。

你 运行 遇到了问题,因为如果你想匹配 {,你必须用反斜杠将其转义或将其放在方括号中:[{]。此外,. 通常不匹配换行符,除非您添加换行符标志。

我想这就是你想要的:

[^{]*apple[^}]*cherry[^}]*

[^}]* 表示根据需要多次匹配 } 以外的任何字符。

Demo