在运行一些测试时这个答案,我注意到以下意外行为。这将删除所有出现的<tag>
在第一个之后:
var input = "<text><text>extra<words><text><words><something>";
Regex.Replace(input, @"(<[^>]+>)(?<=\1.*\1)", "");
// <text>extra<words><something>
但这不会:
Regex.Replace(input, @"(?<=\1.*)(<[^>]+>)", "");
// <text><text>extra<words><text><words><something>
同样,这将删除所有出现的<tag>
在最后一个之前:
Regex.Replace(input, @"(<[^>]+>)(?=.*\1)", "");
// extra<text><words><something>
但这不会:
Regex.Replace(input, @"(?=\1.*\1)(<[^>]+>)", "");
// <text><text>extra<words><text><words><something>
所以这让我思考......
.NET正则表达式引擎中,是否需要出现反向引用after它引用的组?或者这些模式是否还有其他原因导致它们不起作用?