Это то, что я придумал с помощью lookbehinds и back referenc ES:
(<[^>]+>)(?<=\1.*\1)
Это будет соответствовать любому экземпляр <tag>
которому предшествует, по меньшей мере, одного другого экземпляра той же <tag>
.
Например, чтобы использовать это в C#:
var input = "<text><text>extra<words><text><words><something>";
var output Regex.Replace(input, @"(<[^>]+>)(?<=\1.*\1)", "");
Console.WriteLine(output); // <text>extra<words><something>
Однако, это не будет работать во многих разновидностях регулярных выражений. JavaScript, например, не поддерживает lookbehinds.
Какова ваша логика? Вы хотите отбросить все, кроме первого появления каждого ''? И, что очень важно, на каком языке вы хотите использовать этот шаблон? –
Я бы использовал регулярное выражение для соответствия шаблону (назначение регулярного выражения), а затем добавьте его в массив, если массив еще не содержит совпадения. Тогда я бы просто развязал массив для вывода. Есть, вероятно, другие способы, но я думаю, что с любым методом регулярное выражение является компонентом решения, а не решением. – twinlakes