Сопоставьте регулярное выражение в MySQL для повторяющегося слова

#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