使用MySQL regexp_replace用另一个模式替换字符串中所有模式的出现

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

我有一列,其中包含以逗号分隔的ISBN列表。我想使用regxp_replace函数从字符串中提取一些信息,以替换字符串中所有出现的模式,但它只返回ISBN列表中最后匹配的模式出现。我已经使用以下MySQL查询:

SELECT regexp_replace('123-4567-8-9012-0, 123-4567-89-012-0, 123-4567-890-12-0, 123-4567-8901-2-0, 123-45678-9-012-3',
'(.*)-(.*)-(.*)-(.*)-(.*)', '\\2-\\3')  prefixes;

查询返回字符串中模式的最后匹配项。

45678-9

我想要以下结果:

4567-8、4567-89、4567-890、4567-8901、45678-9

如果可以使用regexp_replace或类似的函数来获得解决方案,我将不胜感激。

谢谢。

mysql regexp-replace
1个回答
0
投票

使用此

[?^-]\d+-\d[?\d+-]

SELECT RIGHT(LEFT(prefixes,LENGTH(prefixes)-1),LENGTH(prefixes)-1)prefixes 
FROM (
    SELECT REGEXP_SUBSTR('123-4567-8-9012-0, 123-4567-89-012-0, 123-4567-890-12-0, 123-4567-8901-2-0, 123-45678-9-012-3','[?^-]\d+-\d[?\d+-]')  prefixes
)X
© www.soinside.com 2019 - 2024. All rights reserved.