Regex 带正则表达式的Postgres查询
我试图创建一个正则表达式来查找(然后最终替换)PG DB中字符串的部分。我正在使用PSQL9.0.4 我已经在PG之外测试了我的正则表达式,它工作得非常好。然而,PG打得不好。如果有人能帮助我理解我做错了什么,我将不胜感激 正则表达式:Regex 带正则表达式的Postgres查询,regex,postgresql,Regex,Postgresql,我试图创建一个正则表达式来查找(然后最终替换)PG DB中字符串的部分。我正在使用PSQL9.0.4 我已经在PG之外测试了我的正则表达式,它工作得非常好。然而,PG打得不好。如果有人能帮助我理解我做错了什么,我将不胜感激 正则表达式: {php}.*\n.*\n.*'mister_xx']\)\);.*\n} \n{\/php} Postgres查询: SELECT COUNT(*) FROM (SELECT * FROM "Table" WHERE "Column" ~ '{php}.*\
{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;
研究生回应:
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...
在SQL中,引号分隔为两个引号,例如:
'Child''s play'
将此应用于正则表达式可以使其正常工作:
SELECT COUNT(*)
FROM "Table"
WHERE "Column" ~ '{php}.*\n.*\n.*''mister_xx'']\)\);.*\n} \n{\/php}' as x;
还要注意冗余子查询是如何进行的。您需要双重转义反斜杠,并在语句前添加一个E:
从“表”中选择*,其中“列”~E'{php}\n.\n.*“先生”]\)\*\n} \n{\/php}您需要在查询中转义
mister_xx
周围的单引号。我已经尝试过了,遗憾的是它返回了相同的错误。我还尝试过转义{and}字符以从简单的开始。例如其中的“Column”~'.''mister\u xx'..'.'
。它将为您找到任何包含'mister\u xx'
的文本。然后从这一点开始建立您的regexp。您当前的regexp有太多错误,无法立即修复它们。