从PostgreSQL中提取匹配正则表达式的字符串

在PostgreSQL中提取与正则表达式匹配的特定字符串的方法的备忘录。虽然手册中写了很多内容,但如果不涉及复杂操作,只需使用substring函数即可。

具体示例

如果没有括号用于捕获,将返回匹配的子字符串。

select substring('psql (PostgreSQL) 10.18', '^\w+');      --> psql
select substring('psql (PostgreSQL) 10.18', '\(\w+\)');   --> (PostgreSQL)
select substring('psql (PostgreSQL) 10.18', '[\d\.]+$');  --> 10.18

如果加上括号用于捕获,只有与括号匹配的字符串才会被返回。使用这种方式的案例似乎更多。

select substring('psql (PostgreSQL) 10.18', '\((\w+)\)');   --> PostgreSQL
select substring('psql (PostgreSQL) 10.18', '(\d+)\.\d+');  --> 10
select substring('psql (PostgreSQL) 10.18', '\d+\.(\d+)');  --> 18

如果在捕获括号上添加多个括号,则只有在第一个括号中匹配的字符串将被返回。因此,如果不想捕获的括号上加上”?”则可以跳过。

select substring('psql (PostgreSQL) 10.18', '(\d+)\.(\d+)');    --> 10
select substring('psql (PostgreSQL) 10.18', '(?:\d+)\.(\d+)');  --> 18

如果本来就没有匹配的情况,结果就会是null。

select substring('psql (PostgreSQL) 10.18', 'mysql');  --> null

不过你可以挑选以下内容,其中一个就是:额外赠品。

用 “substring( from )” 取代 “substring(, )” 是一样的。

select substring('psql (PostgreSQL) 10.18' from '^\w+');  --> psql

确认环境

    PostgreSQL 10.18

文献引用

    9.7. パターンマッチ – PostgreSQL 10.5文書
广告
将在 10 秒后关闭
bannerAds