捕获开始非捕获组的结束

时间:2014-02-17 14:19:06

标签: regex

我正试图在捕获组之后得到一个句子。这时我得到了这个正则表达式: (?!.*foo).*

所以,当我在跟随字符串上测试它时:

foofoofooCopyStartingHere

引擎返回:

ooCopyStartingHere

如何忽略“oo”部分?

ps:起始副本标签不在我的控制之下,它可能会改变长度(但保持模式)。

测试人员试过:

http://regex101.com/r/jU2eY4

http://regexpal.com/?flags=g&regex=(%3F 富)&安培;输入= foofoofoo.e

2 个答案:

答案 0 :(得分:1)

(?<=foo)(?!foo)(.+)

我们的想法是你在后面寻找foo,然后检查它后面是否有foo,然后捕获它后面的任何内容。

你没有提到任何关于停止条件的事情,所以这将继续用于其余部分,这是否符合预期?

答案 1 :(得分:0)

您可以测试一下:

(?<=foo|^)(?>[^f]+|f(?!oo))+

模式开始检查字符串之前或字符串的开头是否有“foo”。然后(?>[^f]+|f(?!oo))+允许所有不是“foo”(所有不是“f”或“f”的字符后面没有“oo”)