如何在SQLite3中使用REGEXP来提取匹配的字符串(作为列值)

问题描述:

有没有一种方法可以使用REGEXP返回不仅仅是否存在匹配(即10),而是实际的匹配本身。举例来说,如果我有一个网址列,我想提取的URL的匹配部分(例如域):如何在SQLite3中使用REGEXP来提取匹配的字符串(作为列值)

SELECT url REGEXP '\w+\.com' AS domain 
FROM urls 
GROUP by domain; 

不知道是否有REGEXP扩展之间的差异,但FWIW,我使用DB Browser for SQLite

+0

这不会返回匹配部分'SELECT * FROM urls WHERE url REGEXP'\ w + \。com''? – revo

+2

@revo ..如果模式匹配会返回一行,否则不会。 OP正在要求模式本身。 –

REGEXP运算符仅返回布尔值,无论文本是否匹配。

如果你想获得更多的信息,你必须写一些其他的功能。

+0

接受此作为答案,因为我还没有找到任何其他(官方)替代方案,并且REGEXP运营商正如您所说。谢谢! –

甲骨文发现了一个提供REGEXP_SUBSTR函数: https://docs.oracle.com/cd/B12037_01/server.101/b10759/functions116.htm#SQLRF06303

这可能是看通过一些实际的功能代码创建一个类似于自己的功能非常有用

您或许可以使用REGEXP_SUBSTR

SELECT REGEXP_SUBSTR(url, '\w+\.com') AS domain FROM urls 
+0

** REGEXP_SUBSTR仅适用于Oracle **,不适用于SQLite3,MySQL,PostgreSQL,... – Meloman

+0

@Meloman它也适用于Amazon Redshift。你是对的,虽然我的答案在这里是SQLite的垃圾 – AlexG