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

本文关键字:字符串 字符 正则表达式 任何 | 更新日期: 2023-09-27 18:02:47

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

这是我的regex尝试:

@@FOO'[(.*)(?=~~)~~(.*)(?=']@@)']@@
样本输入:

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

期望输出:2个匹配,各有2个匹配组(abc, hi)和(def, hey)。

实际输出:1匹配2组(abc~~hi]@@ @@FOO[def, hey)

是否有办法得到想要的输出?

提前感谢!

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

使用问号,匹配次数越少越好。

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

这个也可以,但没有那么严格,尽管更容易阅读

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

*操作符在默认情况下是贪婪的,这意味着它会吃掉尽可能多的字符串,同时仍然留下足够的内容来匹配剩余的正则表达式。你可以通过附加一个?到它。请务必阅读链接中的差异

您可以使用String.IndexOf()方法来查找子字符串的第一次出现