我正在尝试创建一个正则表达式来查找(然后最终替换)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...
答案 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的}“