我有一个字符串,它之前用 initcap() 处理过,我想把它的大写部分。
具体来说 - 我想将可能出现的基本罗马数字大写。
更具体地说,我想替换
雅娜三世索别斯基格
至
亚娜三世索别斯基格
我想我可以使用某种上子字符串子查询组合来实现它,但我试图让它在单个 regexp_replace 中工作,如下所示:
SELECT
ulica
--, regexp_matches(ulica , '((^|\s)([XxIiVv]+)(\s|$))', 'g')
, regexp_replace(ulica, '((^|\s)([XxIiVv]+)(\s|$))', '\2'||upper('q\3q')||'\4' , 'g')
FROM (
SELECT unnest(ARRAY['Jana Iii Sobieskiego', 'Xx Lecia', 'Xxx Lecia Panowania Zygmunta Iii Wazy'])::text AS ulica
) AS src
发生的情况是,上部适用于替换字符串(q...q)的“静态”部分,但不适用于反向引用。
我明白了
Jana QiiiQ Sobieskiego
任何人都知道如何做到这一点?
PostgreSQL 9.1