如何重做特定键之间的正则表达式匹配?

问题描述 投票:0回答:1

目标文本示例:

foo
not_foo
bar
--
bar
foo
not_foo
--
bar
--
foo
bar
--

我想找到所有以 foo 开头并以 bar 结尾的文本,但仅限于同一个

--
块内。 所以预期的结果只会返回第一个

foo
not_foo
bar

还有最后一个 foo bar 块。

foo
bar

我尝试使用

foo.*?bar
进行多行正则表达式搜索,但它同时返回第二个和第三个块

foo
not_foo
--
bar

,应该被忽略,因为它们被

--
分隔。

想听听任何建议。 谢谢。

regex multiline
1个回答
0
投票

您可以使用负向先行模式来断言

foo
bar
之间的每个匹配字符后面都没有
--
:

foo(?:.(?!--))*bar

请注意,上面的模式假设您的工具支持单行模式,其中

.
匹配包括换行符在内的所有字符。如果没有,您可以使用类似
[\s\S]
的字符集代替
.

演示:https://regex101.com/r/RGOcpp/1

© www.soinside.com 2019 - 2024. All rights reserved.