我需要一些帮助。
我有PostgreSQL regexp_replace模式,如:
regexp_replace(lower(institution_title),'[[:cntrl:]]|[[[:digit:]]|[[:punct:]]|[[:blank:]]|[[:space:]|„|“|“|”"]','','g')
我在PHP语言中需要这个替代方案
因为一半来自postgress db,我必须比较来自php的字符串。
答案 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字符串。
答案 1 :(得分:0)
这是我的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"
第一封信不是降低的情况,不知怎的......我错过了什么?