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

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

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

@@FOO\[(.*)(?=~~)~~(.*)(?=\]@@)\]@@ 

样本输入:

 @@FOO[abc~~hi]@@ @@FOO[def~~hey]@@ 

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

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

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

提前致谢!

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

 @@FOO\[(.*?)(?=~~)~~(.*?)(?=\]@@)\]@@ 

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

 @@FOO\[(.*?)~~(.*?)\]@@ 

默认情况下,*运算符是贪婪的,这意味着它尽可能多地占用字符串,同时仍然留下足以匹配剩余的正则表达式。 你可以通过追加一个来使它不贪心吗? 它。 请务必阅读链接中的差异。

您可以使用String.IndexOf()方法来查找子字符串的第一个匹配项。