mysql regex-当后面跟特定字符串时,过滤大于XX的数字

问题描述 投票:1回答:1

我正在搜索可在MySql查询中使用的RegEx

我要存档的查询将过滤所有包含“ xx%to Fire Resistance”值的字符串的行,而xx是动态值,比如22,但是我不希望所有的行都具有22但所有行都为22 AND higher。这可能吗?

我可以使用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

一个示例“ mods”字段内容

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

php mysql sql regex regular-language
1个回答
2
投票

在8之前的MySQL版本中,您可以使用

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后跟一个从29的数字
    • |-或
    • [[3-9][0-9]-从39的一位,然后是任意一位]
    • |-或
    • [[1-9][0-9]{2,}-从19的数字,然后是两个或多个数字]
  • [([.][0-9]+)?-可选的.和1个以上的数字]
  • [% to Fire Resistance-子字符串
  • [[[:>:]]-右侧单词边界
© www.soinside.com 2019 - 2024. All rights reserved.