Regex
/<[^>]*Content="foo".*?>/g
Что означает запуск регулярного выражения (/
) и поиск <
с нулем или большим числом не >
s ([^>]*
), а затемContent="foo"
, за которым следует ноль или более (.*
) un -свободно, затем '>' и конечное регулярное выражение /
.
Код теста:
Написан на языке javascipt, но может быть легко перенесен на другие языки.
x = ['<Button x:Name="Button1" /><Button x:Name="Button2" Content="foo" /><Button x:Name="Button1" /><Button Content="foo" />']
console.log( x[0].match(/<[^>]*Content="foo".*?>/g) )
Обновлен в соответствии с точным противоположным (как требуется OP)
Regex
Используя отрицательное прогнозное утверждение, как подробно здесь
<((?!Content="foo")[^>])*>
Что означает совпадение <
, за которым следует ноль или более, а не >
s ([^>]*
), которых у каждого нетContent="foo"
перед ними, затем >
.Добавлены скобки для необходимой группировки.
Но помните - использование регулярного выражения в качестве замены синтаксического анализа XML заставит людей из-за переполнения стека по-настоящему рассердиться на вас ... так что лучше публиковать подобные вопросы анонимно.;)