[英]How to replace all occurrences of target in matched group?
我想将毯子中所有带引号的字符串替换为 PostgreSQL 中的双引号字符串。
这是我当前的脚本和样本输入。
select regexp_replace(
'input string',
'\[(("([^"]+)"|''([^'''']+)'')(, )?)+]',
'["\3\4"]',
'g'
)
["The D'Ascoyne Family: The Duke", 'The Banker', 'The Parson', 'The General', 'The Admiral', 'Young Ascoyne', 'Young Henry', 'Lady Agatha']
['Fabian', '...']
['Peter Griffin', 'Stewie Griffin', 'Brian Griffin', 'Carter Pewterschmidt']
但是,它仅替换最后引用的字符串并删除其他所有内容。
["Lady Agatha"]
["..."]
["Carter Pewterschmidt"]
所需的输出如下所示
["The D'Ascoyne Family: The Duke", "The Banker", "The Parson", "The General", "The Admiral", "Young Ascoyne", "Young Henry", "Lady Agatha"]
["Fabian", "..."]
["Peter Griffin", "Stewie Griffin", "Brian Griffin", "Carter Pewterschmidt"]
https://regex101.com/r/dvAIBt/1
我怎样才能克服这个问题?
如果您的字符串不包含"""
子字符串,您可以使用
REPLACE(REGEXP_REPLACE(col, '("[^"\\]*(?:\\.[^"\\]*)*")|''([^''\\]*(?:\\.[^''\\]*)*)''', '\1"\2"'), '"""', '"')
("[^"\\]*(?:\\.[^"\\]*)*")|'([^'\\]*(?:\\.[^'\\]*)*)'
正则表达式匹配
(
- 第 1 组开始:"
- 一个"
字符[^"\\]*
- 除"
和\
之外的零个或多个字符(?:\\.[^"\\]*)*
- 零个或多个\
序列,后跟任何单个字符,然后是"
和\
以外的零个或多个字符"
- 一个"
字符)
- 第 1 组结束|
- 或者'
- 一个'
字符([^'\\]*(?:\\.[^'\\]*)*)
- 第 2 组:除'
和\
之外的零个或多个字符,然后是零个或多个\
序列,后跟任何单个字符char 然后除'
和\
之外的零个或多个字符'
- 一个'
字符。 由于"..."
字符串文字不需要更改,它们将被替换为自己 + ""
,因此它们的右侧将有"""
,因此,您只需要添加一个REPLACE
即可替换所有"""
与"
s。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.