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

我希望能够匹配特定的字符序列,从一个特定的子字符串开始并以特定的子字符串结尾。 如果只有一个实例在一条线上匹配,我的积极的lookahead正则表达式可以工作,但如果线上应该有多个匹配,则不会。 我知道这是因为(。+)捕获了所有内容,直到找到最后一个正向lookahead表达式。 它会很好,如果它捕捉到所有内容,直到找到第一个表达式。

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

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

示例输入:

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

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

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

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

提前致谢!


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

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

这一个也有效,但并不严格,但更容易阅读

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

*运算符默认为贪婪,这意味着它尽可能多地消耗了字符串,同时仍然留下足够的空间来匹配剩余的正则表达式。 你可以通过追加一个不贪心 到它。 请务必阅读有关链接上的差异。


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

链接地址: http://www.djcxy.com/p/76729.html

上一篇: Using regex to match any character until a substring is reached?

下一篇: How to do a regular expression replace in MySQL?