【发布时间】:2019-10-10 21:33:54
【问题描述】:
请以下面的正则表达式为例:
如您所见,正则表达式效果很好,并且与产品描述中的尺寸(例如 3/16 英寸等)相匹配。
我正在尝试使用 REGEXP_SUBSTR() 在 MySQL 8.0.15 中实现这一点
根据documentation,我将转义字符加倍,但正则表达式不起作用。
请看下面的 SQL fiddle:
https://www.db-fiddle.com/f/e6Ez3XCdU5Ahs91z6TQA8P/0
如您所见,REGEXP_SUBSTR() 返回NULL
我假设这是一个逃生问题 - 但我不是 100% 确定。
如何确保 MySQL 返回每个产品(行)的第一个匹配项,类似于 regexr.com 示例?
干杯
编辑:28/05/2019 - 根本原因
Wiktor 在下面的回答解决了我的问题,而且他的正则表达式更简洁,值得点赞。也就是说,我不明白为什么我的原始版本在从 SQL Server 移植到 MySQL 后无法正常工作。今天早上我终于注意到了这个问题 - 它与正则表达式无关,这是字符串连接中的新手错误!具体来说,我使用的是UPPER(Description + ' ')(即使用+)——它在SQL Server 中运行良好,但很明显; MySQL强制数字!所以我基本上是在针对0 运行我的正则表达式!用CONCAT 替换+ 实际上用原始正则表达式修复了我的原始查询 - 只是想我会分享这个以防它帮助其他人!
【问题讨论】:
-
您在 regexr 中启用了不区分大小写的模式。在您的模式开始处添加
(?i)。 -
请分享您尝试与正则表达式匹配的确切示例输入。
-
嗨 Wiktor,我已经在 SQL 小提琴中提供了准确的示例输入,我还在 MySQL 中使用了 UPPER() 来处理大小写(正则表达式为大写)
-
您尝试与
(?=[.\s()$])匹配什么?我对$感兴趣 - 字符串结尾或$符号? -
我不认为 MySQL REGEXP_SUBSTR 可以做到
(?=...(前瞻)。