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

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

当我使用sqlmanagerforpostgresql(Windows环境)进行测试时,它按预期工作。但是。。。
但是这个查询是在一个PHP文件中,它每天都使用crontab(Linux环境)运行,它删除重复的空格、制表符、换行符和“s”
例如,前面的字符串:
"Small

unicorns are   smart"

变成:
"mall unicorn are mart"

为什么会这样?

最佳答案

您不想在php中对\进行双重转义(与Java不同)。您实际上是在转义反斜杠,将特殊字符转换为文字字母。或者,如果我完全错了,你真的需要双重逃脱。
尝试:

[\|\s\n\r]+

此外,正如马克西姆指出的,\r和\n已经包含在S中。
编辑:
看起来你也在尝试在其中包含一个文字管道。在这种情况下,使用[|\s]+http://regex101.com/r/nE3dI8
如果需要双重转义,[|\\\s]+

10-04 11:33
查看更多