使用正则表达式进行Postgres查询

时间:2013-05-21 05:30:09

标签: regex postgresql

我正在尝试创建一个正则表达式来查找(然后最终替换)PG DB中的部分字符串。我正在使用PSQL 9.0.4

我在PG之外测试了我的正则表达式,它运行得很好。然而,它与PG并不是很好。如果有人能帮助我理解我做错了什么,我会非常感激。

正则表达式:

{php}.*\n.*\n.*'mister_xx']\)\);.*\n} \n{\/php}

Postgres查询:

SELECT COUNT(*) FROM (SELECT * FROM "Table" WHERE "Column" ~ '{php}.*\n.*\n.*'mister_xx']\)\);.*\n} \n{\/php}') as x;

Postgres回复:

WARNING:  nonstandard use of escape in a string literal
LINE 1: ...M (SELECT * FROM "Table" WHERE "Column" ~ '{php}.*\n...
                                                             ^
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.
ERROR:  syntax error at or near "mister_xx"
LINE 1: ..."Table" WHERE "Column" ~ '{php}.*\n.*\n.*'mister_x...

2 个答案:

答案 0 :(得分:1)

在SQL中,引号被分隔为两个引号,例如:

'Child''s play'

将它应用于你的正则表达式使它工作:

SELECT COUNT(*)
FROM "Table"
WHERE "Column" ~ '{php}.*\n.*\n.*''mister_xx'']\)\);.*\n} \n{\/php}' as x;

还要注意冗余子查询。

答案 1 :(得分:1)

你需要双重转义反斜杠并在语句前添加一个E: SELECT * FROM“Table”WHERE“Column”~E'{php} \ n。 \ n。*''mister_xx''] \)\);。* \ n} \ n \ n \ / PHP的}“