php - mysql regex - 过滤大于 XX 后跟特定字符串的数字
问题描述
我正在寻找可以在 MySql 查询中使用的 RegEx
我要归档的是一个查询,它过滤所有行,其中有一个值为“xx% to Fire Resistance”的字符串,而 xx 是一个动态值,比如说 22,但我不只想要所有行 22,而是所有行具有 22 和更高的行。这有可能吗?
我可以在第二步中使用 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;
解决方案
在 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
后跟一个数字 from2
to9
|
- 或者[3-9][0-9]
- 从3
到的数字9
,然后是任何 1 位数字|
- 或者[1-9][0-9]{2,}
- 从1
to一个数字9
,然后是两个或多个数字
([.][0-9]+)?
- 一个可选的.
和 1+ 位数字% to Fire Resistance
- 一个子串[[:>:]]
- 右手边的单词边界
推荐阅读
- vue.js - 尝试加载图像文件时出错 - Vuejs
- ios - 如何在单个视图控制器中创建多个pickerView?
- django - Django URL路径问题
- python-3.x - 当我尝试在 python3 上运行脚本时,我得到: SyntaxError: Invalid syntax (mac)
- cypher - 密码触发器序列:交替边缘方向的遍历(AgensGraph)
- c++ - 将 Directx 11 后台缓冲区渲染到 Direct2d
- r - 表示日期范围的绘图线
- mysql - N个用户的百分比分享
- docker - 我应该在我的 docker-compose 文件中使用次要版本吗?
- algorithm - 给定一个点对数组,对它们进行排序,使终点与下一个点的起点相匹配