Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Пожалуйста помогите составить запрос с рег.выражением / 4 сообщений из 4, страница 1 из 1
28.11.2013, 16:57:48
    #38482157
Gentianviolett
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите составить запрос с рег.выражением
Пожалуйста помогите составить запрос с рег.выражением
Надо регулярным выражением выбрать из колонки "body" таблицы "docdata" все записи, в которых встречается гиперссылки на файлы по маске *14.doc, находящиеся в папке "/img/".
например:
Код: plaintext
1.
2.
3.
/img/prog_my7-test14.doc
/img/x1-x2-14.doc
/img/raz14.doc
/img/oz-t_avia14.doc
и т.д.

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

Варианты запросов не работают:
Код: sql
1.
SELECT * FROM `docdata` WHERE `body` REGEXP '(\/img\/(.*?)14\.doc)+'


Код: sql
1.
SELECT * FROM `docdata` WHERE `body` REGEXP '(\/img\/+.+14+\.+doc+)+'


Код: sql
1.
SELECT * FROM `docdata` WHERE `body` REGEXP CONCAT('\/img\/','[:alnum:]','14\.doc')



Поиск по многочисленным программистским форумам, тоже ничего не дал...

Заранее благодарю за помощь!
...
Рейтинг: 0 / 0
29.11.2013, 00:52:06
    #38482719
Aristol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите составить запрос с рег.выражением
Gentianviolett,

Код: sql
1.
SELECT * FROM `docdata` WHERE `body` REGEXP '/img/.*14.doc'
...
Рейтинг: 0 / 0
30.11.2013, 17:43:28
    #38484521
Gentianviolett
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите составить запрос с рег.выражением
Спасибо, Aristol!
Все сработало, и результат похож на правду! :)
Был удивлен, что mySQL-запросах не нужно экранировать слеши, точки и др. спец. символы...
...
Рейтинг: 0 / 0
30.11.2013, 17:53:22
    #38484529
Gentianviolett
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите составить запрос с рег.выражением
А если задам еще более сложный вопрос?

Сейчас решил свою задачу на РНР.
Массив записей, полученных Вашим запросом с REGEXP, перебираю в цикле. К каждому значению поля `body` применяю PHP-регулярное выражение, меняющее путь к .doc-файлам, затем выполняю для него запрос к базе через UPDATE. Работает, но выглядит не слишком элегантно.

Можно ли одним (!) запросом заменить во всех найденных записях, подстроки по шаблону '/img/.*14.doc' на '/word/.*14.doc'?
Т.е. поменять все ошибочные пути в ссылках с "/img/" на "/word/"?
И было бы вообще сказочно, если бы вернулся список значений полей `id` для всех записей, которые были затронуты.
Это нужно, чтобы потом, сгенерировав список ссылок, вручную проверить результаты. Но все же, думаю, что это проще сделать двумя запросами: первый просто возвращает список строк, второй производит замену.

Собственно, задача решена, и дальнейший интересу уже сугубо образовательный...

Заранее благодарю!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Пожалуйста помогите составить запрос с рег.выражением / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]