1

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

2 回答 2

1

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

于 2013-05-22T14:19:50.063 回答
1

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

'Child''s play'

将此应用于您的正则表达式使其工作:

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

还要注意冗余子查询如何。

于 2013-05-21T12:09:36.227 回答