问题描述
我正在努力提出一些可行的方法。
环境:Windows 10(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[^}]*
[^}]*
意味着可以根据需要匹配除}
以外的任何其他字符。