REGEXP в MySQL возвращает нежелательное значение - PullRequest
2 голосов
/ 24 июня 2010

У меня проблема с использованием REGEX в Mysql

У меня есть значение oid в базе данных, как это

id -> value

1.3.6.1.4.1 -> Value a

1.3.6.1.4.1.2499.1.1.2.1.1.1.1.1 -> Значение b

1.3.6.1.4.1.2499 -> Значение c

И мои объекты1. Чтобы получить один oid & value с определенным oid, который я поместил в оператор sql 2. Если нет конкретного значения, он должен обратить номер oid по номеру, пока не найдет новое значение

Например, если iиспользуйте [ выберите идентификатор из имени таблицы, где '1.3.6.1.4.1.2499.1.1.2.1.1.1.1.1' oid REGEXP ] должен возвращать только 1.3.6.1.4.1.2499.1.1.2.1.1.1.1.1 но вышеупомянутый sql вернет весь результат

Если я использую [, выберите id из имени таблицы, где '1.3.6.1.4.1.24999999.5' REGEXP oid ]должен возвращать только 1.3.6.1.4.1, но возвращает 1.3.6.1.4.1 и 1.3.6.1.4.1.2499

Если я использую select id from tablename где '1.3.6.1.4.1.2499.1.1.2.1.1.1.1.100 'REGEXP oid itдолжен возвращать только 1.3.6.1.4.1.2499, но он возвращает все идентификаторы

Я не очень знаком с этим REGEXP.Может ли кто-нибудь помочь мне решить эту проблему.Спасибо

Ответы [ 2 ]

0 голосов
/ 23 ноября 2010

Я не думаю, что регулярное выражение - правильный инструмент для этой работы.

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

Сравнение списка с oid. Если ноль соответствует, удалите последний элемент списка. Повторите.

0 голосов
/ 24 июня 2010

В MySQL вы должны использовать field REGEXP value, например:

select id from tablename where oid REGEXP '1.3.6.1.4.1.2499.1.1.2.1.1.1.1.1'

. необходимо экранировать с помощью \
И чтобы сопоставить всю строку, используйте ^ и $:

select id from tablename where oid REGEXP '^1\.3\.6\.1\.4\.1\.2499\.1\.1\.2\.1\.1\.1\.1\.1$'

Я не понимаю, почему вы используете REGEXP, когда вы можете выбрать с помощью LIKE, потому что вы не выполняете поиск по регулярному выражению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...