使用正则表达式匹配任何字符,直到达到子字符串?
我希望能够匹配特定的字符序列,从一个特定的子字符串开始并以特定的子字符串结尾。 如果只有一个实例在一条线上匹配,我的积极的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?