从Postgress regexp替换PHP语言中的匹配

时间:2016-03-29 12:02:27

标签: php regex postgresql regexp-replace

我需要一些帮助。

我有PostgreSQL regexp_replace模式,如:

 regexp_replace(lower(institution_title),'[[:cntrl:]]|[[[:digit:]]|[[:punct:]]|[[:blank:]]|[[:space:]|„|“|“|”"]','','g')

我在PHP语言中需要这个替代方案

因为一半来自postgress db,我必须比较来自php的字符串。

2 个答案:

答案 0 :(得分:1)

您可以在PHP PCRE正则表达式中使用相同的POSIX字符类:

preg_replace('/[[:cntrl:][:digit:][:punct:][:blank:][:space:]„““”"]+/', '', strtolower($institution_title))

请参阅demo

此外,PCRE中有Unicode category classes。因此,您也可以尝试

preg_replace('/[\p{Cc}\d\p{P}\s„““”"]+/u', '', mb_strtolower($institution_title, 'UTF-8'))

其中\p{Cc}代表控制字符,\d代表数字,\p{P}代表标点符号,\s代表空格。

我正在添加/u修饰符来处理Unicode字符串。

查看regex demo

答案 1 :(得分:0)

hanks伙计们,但我遇到了另一个问题,我无法匹配字符串,如果有特定的符号,

这是我的postgres sql输出:

SQL:

select regexp_replace(lower(title),'[[:cntrl:]]|[[[:digit:]]|[[:punct:]]|[[:blank:]]|[[:space:]|„|“|“|”"]','','g')
from cls_institutions

输出:

"oxforduniversity"
"šiauliųuniversitetas"
"harwarduniversity"
"internationalbusinessschool"
"vilniuscollege"
"žemaitijoskolegija"
"worldhealthorganization"

但是在PHP中输出有点不同:我的机构有我的阵列:

$institutions[] = "'".preg_replace('/[[:cntrl:][:digit:][:punct:][:blank:][:space:]„““”"]+/', '', strtolower($data[0]))."'";

PHP输出如下:

"oxforduniversity",
"Šiauliųuniversitetas",
"harwarduniversity",
"internationalbusinessschool",
"vilniuscollege",
"Žemaitijoskolegija",
"worldhealthorganization"

第一封信不是降低的情况,不知怎的......我错过了什么?