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/ 处返回 AB353
和 AB476
,但在 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]
就足够了。
我目前正在尝试使用 MySQL 从字符串中提取模式,但不幸的是还没有达到预期的结果。因此,我很想得到你的一些支持。
字符串如下所示:
AB3530A/AB476-1
我只想提取这部分:
AB476
我已经尝试过以下正则表达式:
[A-Z]{2}[0-9]{3}
返回:
AB476-
我也试过:
[A-Z]{2}[0-9]{3}([^0-9]|$)
在 http://regexr.com/ 处返回 AB353
和 AB476
,但在 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]
就足够了。