Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 带正则表达式的Postgres查询_Regex_Postgresql - Fatal编程技术网

Regex 带正则表达式的Postgres查询

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}.*\

我试图创建一个正则表达式来查找(然后最终替换)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}.*\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有太多错误,无法立即修复它们。