php - Postgres Regex 未按预期工作

标签 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"


为什么会这样?

最佳答案

您不想在 php 中对 \ 进行双重转义(与 Java 不同)。您实际上是在转义反斜杠,将特殊字符变成文字字母。或者,如果我完全错了,您实际上需要双重转义。

尝试:

[\|\s\n\r]+

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

编辑:

看起来你也想在其中包含一个文字管道。在这种情况下,使用 [|\s]+ http://regex101.com/r/nE3dI8

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

关于php - Postgres Regex 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21442469/

相关文章:

php - laravel 5.4 二进制类型的数据库字符集和排序规则

php - 根据下拉选择调整查询

php - 如何使用PHP从MYSQL同时获取和显示数据

sql - 从多个表中选择时列名不明确

sql - 在记录列表之间插入新记录

r - 在精确模式后提取 n 个字符/数字

python - 如何找到以 <!-- 开头的 HTML 注释的第一个实例? (Python)

php - 多维数组转对象,具体方式

SQL Server 将前导零添加到一位数月份

.net - 需要有关用于解析 JSON 字符串的 .NET 正则表达式的帮助