Как с помощью regexp найти закрывающие теги, перед которыми нет открывающих?

Рейтинг: 0Ответов: 1Опубликовано: 10.05.2023

Выражение для примера: <strong> lorem [[ipsum dolor sit </strong>amet]]

Нужно составить regexp для выделения внутри [[...]] закрывающих тегов, перед которыми нет открывающих. Я пытался сделать вот так (?<!\[\[.+?<strong>.+?(?=<\/strong>))<\/strong>, но он выделяет и те закрывающие теги, которые вне скобок [[...]]. Например здесь это выражение выделит оба </strong>:

<strong> lorem</strong> [[ipsum dolor sit </strong>amet]]

Ответы

▲ 0

Нашёл ответ. Следующее регулярное выражение находит закрывающие теги, перед которыми нет открывающих, в рамках [[...]]:

(\[\[[^\][]*?)(?<!([^\][]*?<strong>[^\][]*?(?=<\/strong>)))<\/strong>

https://regex101.com/r/t8hNpA/2

И вот "вторая половина", которая уже не относится напрямую к вопросу, но решает задачу в инверсивном виде. Следующее выражение находит открывающие теги, после которых нет закрывающих, в рамках [[...]]:

(?<=\[\[[^\][]*?)<strong>(?!(?<=<strong>)[^\][]*?<\/strong>)([^\][]*?\]\])