REGEX удалить все теги внутри скобок
Имеется текст:
{<img>content</img><img src="some-pic-url">content</img>o}
<a> content </a> <a href="url">content</a>
<a href="url">content</img>
<img src="some-pic-url">content</a>
<a href="url">content
<img src="some-pic-url"/>content
Необходимо удалить все теги внутри фигурных скобок, чтобы получился такой результат:
{contentcontento}
<a> content </a> <a href="url">content</a>
<a href="url">content</img>
<img src="some-pic-url">content</a>
<a href="url">content
<img src="some-pic-url"/>content
Выражение (?:<).*?(?:>) может найти все теги во всем тексте.
Выражение (?={).*(?<=}) может найти что нибудь внутри скобок.
Два этих выражения вместе, чтобы найти все теги внутри скобок, не работают (?={)(?:<).*?(?:>)(?<=})
Да, можно в коде циклом искать подстроки и работать с ними, но неужели нет возможности сделать все в одной регулярке?
Ссылка с примером где можно проверить https://regex101.com/r/EHXEXh/1
Ответы (2 шт):
Используйте
(?:\G(?!\A)|{)[^{}]*?\K<[^<>]*>(?=[^{}]*})
См. пример использования регулярного выражения.
Подробности:
(?:\G(?!\A)|{)- конец предыдущего совпадения или символ{[^{}]*?- ноль и более символов, отличных от{и}, но как можно меньше\K- забыть всё, что было найдено до этого места<[^<>]*>-<, ноль и более символов, отличных от<и>, а потом>(?=[^{}]*})- сразу после должно быть ноль и более символов, отличных от{и}, а потом}.
Еще один вариант, по которому я пока не готов предоставить расшифровку, так как пока не разобрался как работает, но он работает:
(?=[^{]*\})(?:<).*?(?:>)