繁体   English   中英

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

[英]Using regex to match any character until a substring is reached?

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

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

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

样本输入:

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

所需的 output:2 个匹配项,每个 (abc, hi) 和 (def, hey) 有 2 个匹配组。

实际output:1对2组(abc~~hi]@@@@FOO[def, hey)

有没有办法获得所需的 output?

提前致谢!

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

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

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

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

* 运算符默认是贪婪的,这意味着它会尽可能多地吃掉字符串,同时仍然留下足够的空间来匹配剩余的正则表达式。 您可以通过附加一个? 给它。 请务必阅读链接上的差异。

您可以改用String.IndexOf()方法来查找 substring 的第一次出现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM