我要替换postgres列中长字符串的内容。
匹配模式为"{Begin}{anything}{mid}{anything}{end}"
,并且匹配为非贪婪版本。
开头,中间,结尾是固定内容,而任何内容都可以包括字符,数字,空格,换行符等。
使用普通的正则表达式,我们可以使用([\s\S]*?)
,但是在Postgres中效果不佳。
我该怎么办。
示例: 我有一个数据库列名称“描述符”,我想匹配内容
"<function type="class"> {anything} <arg name="class.name">com.ehi.jira.plugin.workflow {anything} </function>",
,它应该匹配最短的内容。对于普通的正则表达式,我将使用
"<function type="class">([\s\S]*?)<arg name="class.name">com.ehi.jira.plugin.workflow([\s\S]*?)</function>".
但是在postgresql中不起作用。
答案 0 :(得分:0)
您可以使用%
运算符来匹配任意数量的字符:
select * from table where col like '<function type="class">%<arg name="class.name">com.ehi.jira.plugin.workflow%</function>'
用于对此进行测试的示例查询:
postgres=# select * from (select '<function type="class"> {anything} <arg name="class.name">com.ehi.jira.plugin.workflow {anything} </function>' as col) as t where col like '<function type="class">%<arg name="class.name">com.ehi.jira.plugin.workflow%</function>' ;
col
---------------------------------------------------------------------------------------------------------------
<function type="class"> {anything} <arg name="class.name">com.ehi.jira.plugin.workflow {anything} </function>
(1 row)