Составьте, пожалуйста, регулярное выражение для массовой замены по шаблону (99 баллов)

программирование php MySQL веб дизайн regexp

Дано:

$string = '...<a href="request.php?id=undefined" target="_blank">....<img border="0" src="../preview/184.jpg" id="pic">....</a>...'; // реально тут длинная html-страница

Требуется заменить undefined на цифру после "../preview/" и перед ".jpg", в данном случае 184. Формат строки request.php?id=undefined и формат пути ../preview/{число}.jpg неизменны, а вот параметры у тэгов <a> и <img> могут быть разные. Более того, тэга <img> может не быть вообще, при этом его обрабатывать не надо. То есть если встретиться такой код:

<a ...undefined...>...</a> <a ...undefined...> <img> </a>

то первый тэг <a> обрабатывать не надо (исключить его можно по правилу: между ним и последующим img нигде не должно быть слова undefined).

В качестве ответа жду php-код (наверное, тут всего одна строчка с preg_replace будет - хотя не уверен, это вам решать).

Кстати, этот HTML находится в базе MySQL (54 записи), и массовую замену я собираюсь производить 108 запросами (54 раза прочитать, 54 раза сохранить). Если предложите более рациональный способ (может, всё это можно сделать одним махом прямо в sql-запросе?) - буду благодарен. Версия MySQL: 5.0.45.

Спасибо.

Примечание:
Какие 20 $, какая работа... для знающего человека это дело пяти минут. Я не учу регулярки только потому, что они нужны мне не чаще одного раза в год. Пришлось самому всё учить-вспоминать, на что я потратил час. И еще 5 минут на саму регулярку. Спасибо ShVE-d за полезную информацию, она помогла мне вспомнить основы и самому решить свою задачу. Держи 99 баллов. Ринат, извини, твой вариант работает не совсем корректно.
Ответы:
это одноразовая работа? :)
Ответ на вторую часть вопроса:
В MySQL нет операций модификации строк с помощью регулярных выражений, поэтому в случае использования одного запроса для чтения и обновления записи можно использовать только строковые функции.
Можно написать функцию в MySQL, которая сделает эту процедуру, но помоему проще и быстрее это сделать в PHP.
За бесплатно и за 99 (!!!) баллов лень дёргаться.
скачайте программу Regex Coach - она повзолит вам и составить регулярку, и научиться их составлять
$str = preg_replace('/^"request.php\?id=([a-z]{9})"(.*?)"..\/preview\/([0-9]{1,5}).jpg"$/i','\\1"request.php?id=\\4" \\3"..preview/\\4.jpg" \\5',$str);


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.