Преждевременная группа, перехватывающая регулярное выражение PHP

У меня есть HTML, хранящийся в базе данных MySQL, которую я переношу на новую установку WordPress из Joomla. Мне нужно удалить некоторый текст подписи внизу каждой страницы.

Пример HTML:

<a href="some/link">link 1</a><p>some really long description</p><a href="another/link">link 2</a>CAPTION TEXT HERE[/caption]

Я использую PHP-скрипт для запроса базы данных и сопоставления регулярных выражений.

Мое регулярное выражение до сих пор:

/(<\/a>)(.*?)(\[\/caption\])/

Мне нужно полностью удалить 2-ю группу заголовков (ТЕКСТ ЗАГОЛОВКА ЗДЕСЬ), поэтому, по сути, заменив группы 1,2 и 3 на группы 1 и 3. Группа 2 может содержать любой буквенно-цифровой или специальный символ.

Проблема, с которой я сталкиваюсь, заключается в том, что группа захвата 1 соответствует закрывающему тегу привязки для ссылки 1 и продолжается до [/caption]

Что происходит:

</a><p>some really long description</p><a href="another/link">link 2</a>CAPTION TEXT HERE[/caption]

заменяется на:

<a href="some/link">link 1</a>[/caption]

когда мне действительно нужно:

<a href="some/link">link 1</a><p>some really long description</p><a href="another/link">link 2</a>[/caption]

Заранее спасибо!


person Community    schedule 24.06.2015    source источник


Ответы (1)


Мужской, чтобы не включать > в совпадающий текст

(<\/a>)([^>]*?)(\[\/caption\])

Демо

person splash58    schedule 24.06.2015