В моей базе данных есть contenfields с большим количеством внутренних ссылок. Мне нужно изменить структуру ссылок с сайта www.mydomain.de/page.html на www.mydomain.de/page/, но оператор замены должен уважать домен:
Это то, что ожидается заменить:
www.mydomain.de/somepage.html -> www.mydomain.de/page/
www.mydomain.de/subfolder/page.html -> www.mydomain.de/subfolder/page/
www.mydomain.de/link.html?param=1 -> www.mydomain.de/page/?param=1
www.mydomain.de/another-link.html#hash -> www.mydomain.de/page/#hash
Все другие ссылки должны быть нетронутыми, вот некоторые примеры, но может быть любой ссылкой в Интернете:
www.some-domain.de/link.html
www.another-domain.com/somelink.html
В одном поле содержимого могут быть разные ссылки:
<p>If you want to read more, click
<a href="#" onclick="location.href='http://www.mydomain.de/page.html'; return false;">here</a>
or there <a href="#" onclick="location.href='http://www.another-domain.com/somelink.html'; return false;">there</a>
Это выполняет замену:
UPDATE tablename
SET contentfield = REPLACE(contentfield, '.html', '/')
Мои идеи (но не знаю, как создать для них инструкцию):
- ГДЕ в предыдущих 100 символах найдено "mydomain.de"
- ГДЕ число найденных ".html" найдено число найденных "mydomain.de"
Не нужно на 100% сопоставлять все ссылки "mydomain.de" , я доволен 90%, но не должно быть неправильной замены во внешних ссылках.