0

我想避免将输入捕获为:

:):) 但想要捕获 sa:)ds 或者只是想从结果中排除,如果有两个或多个相同的标签相互接触。

我的逻辑说我需要使用否定的lookbehind并命名捕获组,但无法使其正常工作,我不确定方法是否正确。

我试过: (?<!(?P<happy>:\)))(?P=happy) 所以如果我输入为:):) --:)-abc 我只想从第二行匹配“:)”

4

1 回答 1

2

如果您要为 .NET 构建正则表达式,请不要使用其他 RegEx 引擎来测试您的模式。也就是说,您可以从 .NET 中的可变长度后视中受益,但不能从 PCRE(您正在使用的引擎)中受益。

这将是 .NET 中的一种解决方法:

(?<happy>:\))(?<!\k<happy>{2,})(?!\k<happy>)

这显然在 regex101.com 中不起作用

于 2018-02-19T22:44:08.400 回答