mysql регулярное выражение - фильтр для числа больше XX, за которым следует заданная строка c - PullRequest
0 голосов
/ 29 января 2020

Я ищу RegEx, который я могу использовать в своем MySql Запросе

. Я хочу заархивировать запрос, который фильтрует все строки, где есть строка со значением "xx% to Fire". «Сопротивление», в то время как xx - это значение динамического c, скажем, 22, но я хочу не только все строки с 22, но все строки с 22 AND выше . Это как-то возможно?

Я мог бы отфильтровать его на втором шаге с помощью php, но первоначальный результат был бы слишком большим, чтобы практично работать с ним.

То, что у меня сейчас есть (и не работает, потому что он просто фильтрует число перед заданной строкой)

SELECT * FROM items WHERE `mods` REGEXP '\b(\d+(?:\.\d+)?)% to Fire Resistance\b'

Что мне нужно в теории

SELECT * FROM items WHERE `mods` REGEXP '\b(\d+(?:\.\d+)?)% to Fire Resistance\b' > 22

один пример содержимого поля "моды"

Some more text;+170 to Accuracy Rating;+25% to Fire Resistance;+4 to Armour;+6 to Evasion Rating;+43 to maximum Life;+39% to Lightning Resistance;Some more text;Some more text;

https://regex101.com/r/ZhIMzc/2

1 Ответ

2 голосов
/ 29 января 2020

В MySQL версиях до 8 вы можете использовать

REGEXP '[[:<:]](2[2-9]|[3-9][0-9]|[1-9][0-9]{2,})([.][0-9]+)?% to Fire Resistance[[:>:]]'

Подробности

  • [[:<:]] - левая граница слова
  • (2[2-9]|[3-9][0-9]|[1-9][0-9]{2,}) - сопоставление группы
    • 2[2-9] - 2 с последующим ди git от 2 до 9
    • | - или
    • [3-9][0-9] - ди git от 3 до 9, а затем любой 1 ди git
    • | - или
    • [1-9][0-9]{2,} - ди git от 1 до 9, а затем две или более цифр
  • ([.][0-9]+)? - необязательные . и 1+ цифры
  • % to Fire Resistance - подстрока
  • [[:>:]] - правая граница слова
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...