使用正则表达式匹配任何字符,直到达到子字符串?

jos*_*hm1 5 c# regex vb.net

我希望能够匹配特定的字符序列,从特定的子字符串开始,以特定的子字符串结束.如果在一条线上只有一个匹配的实例,那么我的正向前瞻性正则表达式会起作用,但如果一条线上应该有多个匹配则不行.我理解这是因为(.+)捕获所有内容,直到找到最后一个正向前瞻表达式.如果它能捕获所有内容直到找到第一个表达式,那就太好了.

这是我的正则表达式尝试:

@@FOO\[(.*)(?=~~)~~(.*)(?=\]@@)\]@@
Run Code Online (Sandbox Code Playgroud)

样本输入:

@@FOO[abc~~hi]@@    @@FOO[def~~hey]@@
Run Code Online (Sandbox Code Playgroud)

期望的输出:2个匹配,每个具有2个匹配的组(abc,hi)和(def,嘿).

实际输出:1与2组比赛(abc ~~ hi)@@ @@ FOO [def,嘿]

有没有办法获得所需的输出?

提前致谢!

Chr*_*aas 5

使用问号,它将尽可能少地匹配.

@@FOO\[(.*?)(?=~~)~~(.*?)(?=\]@@)\]@@
Run Code Online (Sandbox Code Playgroud)

这个也有效,但不是那么严格,但更容易阅读

@@FOO\[(.*?)~~(.*?)\]@@
Run Code Online (Sandbox Code Playgroud)