从 Postgres 正则表达式替换 PHP 语言的匹配
From Postgress regexp replace match in PHP language
我需要一些帮助。
我有 PostgreSQL regexp_replace 模式,例如:
regexp_replace(lower(institution_title),'[[:cntrl:]]|[[[:digit:]]|[[:punct:]]|[[:blank:]]|[[:space:]|„|“|“|”"]','','g')
我需要 PHP 语言
的替代方案
因为一半来自 postgress 数据库,我还必须比较来自 php 的字符串。
您可以使用相同的 POSIX 字符 类 和 PHP PCRE 正则表达式:
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
谢谢大家,但我遇到了另一个问题,如果有特定符号,我无法匹配字符串,
这是我的 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"
第一个字母不是小写,不知何故...我错过了什么?
我需要一些帮助。
我有 PostgreSQL regexp_replace 模式,例如:
regexp_replace(lower(institution_title),'[[:cntrl:]]|[[[:digit:]]|[[:punct:]]|[[:blank:]]|[[:space:]|„|“|“|”"]','','g')
我需要 PHP 语言
的替代方案因为一半来自 postgress 数据库,我还必须比较来自 php 的字符串。
您可以使用相同的 POSIX 字符 类 和 PHP PCRE 正则表达式:
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
谢谢大家,但我遇到了另一个问题,如果有特定符号,我无法匹配字符串,
这是我的 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"
第一个字母不是小写,不知何故...我错过了什么?