MySQL: поиск по регулярному выражению

186
07 июля 2018, 22:20

Есть большая таблица с названиями улиц. Мне необходима выбрать из нее только те, которые содержат дефис и названия, например "Тверская-Ямская 1-я".

Я составляю запрос: SELECT * FROM tbl_name WHERE street REGEXP '/^[А-Яа-я]+\-[А-Яа-я]+\s[0-9]+[-я]+/ui'

Результатом должно быть примерно такая таблица:

+------+---------------------+
| id   | street              |
+------+---------------------+
| 5    | Тверская-Ямская 1-я |
| 6    | Тверская-Ямская 2-Я |
| 7    | Тверская-Ямская 3-Я |
| 4    | Тверская-Ямская 4-Я |
+------+---------------------+

Но в моем случае результат пуст.

Я попробовал проделать то же самое в php:

preg_match('/^[А-Яа-я]+\-[А-Яа-я]+\s[0-9]+[-яЯ]+/ui', 'Тверская-Ямская 1-я', $matches);

И я вижу результат:

Array
(
     [0] => Тверская-Ямская 1-я
)

Подскажите, пожалуйста, в чем моя ошибка?

Спасибо!

Answer 1

Попробуйте изменить условие отбора следующим образом:

WHERE street REGEXP '[а-я]+-[а-я]+ [0-9]+[-я]'

Регулярные выражения в MySQL

Answer 2

У вас не работает т к используются не допустимые символы для sql регулярных выражений, такие как "/ /ui","\s". Вы могли бы обойтись и без регулярных выражений, напирмер оператором LIKE:

SELECT * FROM tbl_name WHERE street "%-% %-%" 
READ ALSO
Проблема с Composer (PHP)

Проблема с Composer (PHP)

При попытке установить зависимости в проекте через Composer (у меня PHP 70, Composer 1

203
Вопрос по выборке из БД

Вопрос по выборке из БД

Нужно получить сумму из 10 строк, для этого пробую использовать следующий запрос:

224
Передача данных в function

Передача данных в function

В общем, есть такой код:

213