SQL 使用 RegExp 从字符串中提取模式

SQL extract pattern from string with RegExp

我目前正在尝试使用 MySQL 从字符串中提取模式,但不幸的是还没有达到预期的结果。因此,我很想得到你的一些支持。

字符串如下所示:

AB3530A/AB476-1

我只想提取这部分:

AB476

我已经尝试过以下正则表达式:

[A-Z]{2}[0-9]{3}

返回:

AB476-

我也试过:

[A-Z]{2}[0-9]{3}([^0-9]|$) 

http://regexr.com/ 处返回 AB353AB476,但在 MariaDB 中仅返回 returns AB353

有人知道如何在没有任何附加标志的情况下只提取吗?

提前致谢。

此致

ShortDive!

你可以试试这个代替正则表达式:

SELECT SUBSTR('AB3530A/AB476-1',9,5) constant_length
     , SUBSTRING_INDEX(SUBSTRING_INDEX('AB3530A/AB476-1','/',-1),'-',1) variable_length

link 表明自其版本 10.0.5 起,MariaDB 支持 Perl 兼容的正则表达式(“PCRE”)。

这个构造应该可以工作 SELECT REGEXP_SUBSTR(your_string, '\b[A-Z]{2}\d{3}\b');.

(\b 是 "word boundary")

SELECT REGEXP_SUBSTR('AB3530A/AB476-1','\b[A-Z]{2}\d{3}\b'); 应该 return 'AB476'

注意:您可以使用 \p{Lu},而不是只允许 ASCII 字符的 [A-Z],这意味着“任何被 Unicode 标记为字母的字符,并且只能是大写字符”。但我想 [A-Z] 就足够了。