我有一个查询,它加载许多字段,并删除重复的空格、制表符和换行符。
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]+