PostgreSQL如何匹配“ [\ s \ S] *”之类的内容?在正则表达式中

时间:2018-11-28 07:22:20

标签: regex postgresql

我要替换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中不起作用。

1 个答案:

答案 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)