Как с помощью regexp найти закрывающие теги, перед которыми нет открывающих?
Выражение для примера: <strong> lorem [[ipsum dolor sit </strong>amet]]
Нужно составить regexp для выделения внутри [[...]] закрывающих тегов, перед которыми нет открывающих. Я пытался сделать вот так (?<!\[\[.+?<strong>.+?(?=<\/strong>))<\/strong>, но он выделяет и те закрывающие теги, которые вне скобок [[...]]. Например здесь это выражение выделит оба </strong>:
<strong> lorem</strong> [[ipsum dolor sit </strong>amet]]
Ответы (1 шт):
Нашёл ответ. Следующее регулярное выражение находит закрывающие теги, перед которыми нет открывающих, в рамках [[...]]:
(\[\[[^\][]*?)(?<!([^\][]*?<strong>[^\][]*?(?=<\/strong>)))<\/strong>
https://regex101.com/r/t8hNpA/2
И вот "вторая половина", которая уже не относится напрямую к вопросу, но решает задачу в инверсивном виде. Следующее выражение находит открывающие теги, после которых нет закрывающих, в рамках [[...]]:
(?<=\[\[[^\][]*?)<strong>(?!(?<=<strong>)[^\][]*?<\/strong>)([^\][]*?\]\])