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

时间:2011-07-18 19:44:12

标签: c# regex vb.net

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

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

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

示例输入:

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

所需输出:2个匹配,每个匹配2个组(abc,hi)和(def,嘿)。

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

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

提前致谢!

3 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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