Postgres Regex没有按预期工作

时间:2014-01-29 20:57:10

标签: php sql regex postgresql

我有一个查询,它会加载很多字段,并删除重复的空格,制表符和换行符。

regexp_replace(FIELD, E'[\|\\s\\n\\r]+', ' ', 'g' ) as FIELD

当我使用Sql Manager for PostgreSQL(Windows环境)测试时,它按预期工作。但...

但是这个查询是在PHP文件中,每天使用crontab(Linux环境)运行,它删除重复的空格,制表符,换行符和“s”

示例,前面的字符串:

"Small 

unicorns are   smart"

变成:

"mall unicorn are mart"


为什么会这样?

1 个答案:

答案 0 :(得分:2)

你不想双重转义php中的\(不像Java)。你实际上是在逃避反斜杠,将特殊字符转换成字母。或者,如果我完全错了,你实际上需要双重逃脱。

尝试:

[\|\s\n\r]+

另外,正如Maxim指出的那样,\ r和\ n已经包含在\ s中。

修改:

看起来你正试图在那里包含一个文字管道。在这种情况下,请使用[|\s]+ http://regex101.com/r/nE3dI8

如果您需要双重转义,[|\\\s]+