2013-05-21 85 views
1

我試圖創建一個正則表達式來查找(然後最終替換)PG數據庫中的字符串的部分。我正在使用PSQL 9.0.4Postgres與正則表達式的查詢

我已經測試了我的正則表達式以外的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

您需要在查詢中圍繞'mister_xx'轉義單引號。 –

+0

我試過了,可惜它會返回相同的錯誤。 –

+0

我也嘗試轉義{和}字符 –

回答

1

在SQL中,引號分隔爲兩個引號,例如:

'Child''s play' 

應用給你的正則表達式使得它的工作:

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

還要注意如何冗餘子查詢。

1

您需要雙重轉義反斜槓並在聲明前添加E: SELECT * FROM「Table」WHERE「Column」〜E'{php} \ n。 \ n'*''mister_xx''] \)\);。* \ n} \ n {\/php}'