#mysql #sql #regex
#mysql #sql #регулярное выражение
Вопрос:
У меня проблема с запросом. Я использую mysql в качестве базы данных. Я хочу использовать РЕГУЛЯРНОЕ выражение, чтобы соответствовать результату, который я ожидал, и таблица
table A
----------------------------------
| ID | Description |
----------------------------------
| 1 | new 2 new 2 new 2 new |
| 2 | new 21 new 2 new |
| 3 | new 12th 2 |
| 4 | 2new 2new |
| 5 | new2 new 2new |
Результат, которого я ожидал
— число 2 может отображаться только дважды
— символ после / перед 2 должен быть varchar (за исключением пробела)
Table B
---------------------------------
| ID | Description |
---------------------------------
| 4 | 2new 2new |
| 5 | new2 new 2new |
Запрос, который я получил до сих пор:
SELECT * FROM a WHERE
(description REGEXP '^[^2]*2[^2]*2[^2]*$')
нажмите здесь для демонстрации sqlfiddle
кто-нибудь может помочь мне решить это?
Комментарии:
1. Можете ли вы изложить свою логику?
2. Результат, который я ожидал — числовое значение 2 может отображаться только дважды — символ после / перед 2 должен быть varchar (за исключением пробела)
3. Что означает «символ после / перед 2 должен быть varchar» ?
4. @muhnizar Вы только что скопировали и вставили из своего вопроса.. Причина, по которой он спросил, заключается в том, что это было недостаточно хорошим объяснением. Пожалуйста, уточните, что вы хотите, чтобы произошло (подробно, пожалуйста). Спасибо
5. Символ @Alma после / перед «числовым 2» не может быть числовым, например ID = 2 и ID = 3
Ответ №1:
Используйте приведенное ниже регулярное выражение, чтобы получить описание четвертого и пятого идентификаторов.
SELECT * FROM a WHERE
(description REGEXP '^2[^2]*2[^2]*|w 2[^2]*2[^2]*$')
http://sqlfiddle.com /#!2/1284e/18
Объяснение:
- Разделите вышеупомянутое регулярное выражение на два типа,
2[^2]*2[^2]*
как одну часть иw 2[^2]*2[^2]*
как другую часть. В регулярном выражении^
представляет начальную точку и$
представляет конечную точку. -
2[^2]*2[^2]*
2
Соответствует числу 2.[^2]*
Соответствует любому символу, не состоящему из 2 нулей или более раз.2
Соответствует числу 2.[^2]*
Соответствует любому символу, не состоящему из 2 нулей или более раз.- Это даст вам 4-й идентификатор.
-
|
Логический оператор OR обычно используется для объединения двух регулярных выражений, что означает сопоставление либо этого (до), либо того (после). -
w 2[^2]*2[^2]*
w 2
Соответствует одному или нескольким символам слова, за которыми должно следовать число 2. В вашем примере 5-й идентификатор удовлетворяет этому регулярному выражению.[^2]*
Соответствует любому символу, не состоящему из 2 нулей или более раз.2
Соответствует числу 2.[^2]*
Соответствует любому символу, не состоящему из 2 нулей или более раз.- Это даст вам 5-й идентификатор.
Комментарии:
1. результат правильный .. но не могли бы вы объяснить мне логику регулярного выражения! Спасибо
2. Мне нужна еще одна помощь от вас .. вы не возражаете? 🙂 @AvinashRaj Я пытаюсь изменить выражение на более общее (ограниченное всеми цифрами) <br/> демонстрация скрипки sql <br/> но почему-то я всегда получал неправильный результат. <br/> извините, что беспокою вас!
3. @muhnizar вы хотели одинаковые значения id4 и ID5?
4. ДА.. Я все еще хочу получить тот же результат id = 4 и id = 5
5. извините, я предоставляю вам неправильные данные. Вот правильное sqlfiddle.com /#!2/be368f/1