Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. Столкнулся с проблемой составления регулярного выражения для поиска по базе данных. Необходимо найти все слова, которые начинаются на http и заканчиваются на 0. В идеале исключить в этих словах часть "site". Запрос, составленный мной, вида [[:<:]]http.*0[[:>:]] не работает. Буду благодарен за любую помощь.
Неактивен
Скорее всего, где-то что-то незаэкранировали в приложении: оно работает.
mysql> select 'http://yandex.ru/0' rlike '[[:<:]]http.*0[[:>:]]'; +----------------------------------------------------+ | 'http://yandex.ru/0' rlike '[[:<:]]http.*0[[:>:]]' | +----------------------------------------------------+ | 1 | +----------------------------------------------------+ 1 row in set (0.00 sec)
Неактивен
paulus написал:
Скорее всего, где-то что-то незаэкранировали в приложении: оно работает.
Спасибо за ответ. Я имел ввиду, что выражение не работает так как хотелось бы, то есть оно находит строки со всеми словами содержащими "http" и "0", а нужно найти только слова с "http" в начале и "0" в конце. Подскажите, пожалуйста, как нужно скорректировать данное выражение для правильной работы?
Отредактированно hop242 (24.12.2010 18:22:54)
Неактивен
Попробуйте написать класс символов, который подходит под URL.
http[:/a-zA-Z0-9_\-]+0 — что-нибудь такое.
Неактивен
Еще раз спасибо за помощь. К сожалению, запрос по Вашему примеру выдает очень много лишних ответов. Я правильно понимаю, что синтаксис не позволяет сделать запрос со строгим ограничением (привязкой) по началу и концу искомого слова?
Неактивен
Смотря что Вы называете словом
Напишите примеры того, что должно попадать, а что должно не попадать.
Неактивен
paulus написал:
Смотря что Вы называете словом
Насколько я понял в MySQL словом является последовательность любых непрерывных символов.
paulus написал:
Напишите примеры того, что должно попадать, а что должно не попадать.
Нужно найти все слова (веб адреса) начинающиеся на http или h и имеющие на конце 0. Хотелось бы исключить веб адреса где 0 не является последним символом слова.
Неактивен
Если Вы — MySQL, то странно, что Вы не знаете, как писать в себе регулярные
выражения. Важно не что MySQL подразумевает под словом, а что подразуме-
ваете Вы.
[silentia] root test > select txt, concat(txt, " ") rlike 'http[:/a-zA-Z0-9_\.\-]+0[[:space:]]' matches from urls; +--------------------------------------+---------+ | txt | matches | +--------------------------------------+---------+ | begin http://yandex.ru/0 end | 1 | | begin http://yandex.ru/1 end | 0 | | begin http://yandex.ru/01 end | 0 | | begin http://yandex.ru0 end | 1 | | begin http://www0.othersite.com0 end | 1 | | begin http://www0.othersite.com9 end | 0 | | begin http://a/b/c/d end | 0 | | begin http://a/b/c/d0 end | 1 | +--------------------------------------+---------+ 8 rows in set (0.00 sec)
Обратите внимание, что я немного схитрил с пробелом в конце, можно попробовать
поиграть с концом строки.
Неактивен
Запрос сработал, удалось найти необходимые слова и понять логику составления запросов в БД. Спасибо.
Неактивен