2016-03-29 4 views
1

Ich brauche etwas Hilfe.Von Postgress regexp ersetzen Übereinstimmung in PHP-Sprache

Ich habe PostgreSQL REGEXP_REPLACE Muster, wie:

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

und ich brauche diese eine Alternative in PHP-Sprache

Da eine Hälfte von Postgress db ist, und ich habe Strings von PHP als gut zu vergleichen.

+0

Die gleiche Regex kann in PHP verwendet werden, hier ist eine erweiterte Version davon: 'preg_replace ('/ [[::]: [: digit:] [: punct:] [: leer:] [: space: ] „“ „“ "] +/u‘, '', strtolower (institution_title)) ' –

Antwort

1

können Sie die gleichen Klassen POSIX-Zeichen mit PHP PCRE regex verwenden:

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

Siehe demo

Außerdem gibt es Unicode category classes in PCRE. So versuchen, können Sie auch

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

Wo \p{Cc} steht für Zeichen Kontrolle, \d für Ziffern, \p{P} für Zeichensetzung und \s für Leerzeichen.

Ich füge /u Modifikator hinzu, um auch Unicode-Strings zu behandeln.

Sehen Sie ein regex demo

+0

ich nicht Saiten mithalten kann, meine Ausgabe von postgres SQL hier ist: SQL: ' select REGEXP_REPLACE (unterer (Titel), '[[: cntrl:]] | [[[: digit:]]] | [[: punct:]] | | [[: blank:]] | | [[: space:] | "|" | "|" "] ‘, '', 'g') aus cls_institutions' SQL: ' "oxforduniversity" "šiauliųuniversitetas" "harwarduniversity" "žemaitijoskolegija" ' PHP: '$ institutions [] =" '".preg_replace ('/[[: cntrl:] [: digit:] [: punct:] [: leer:] [: space:]" "" ""] +/',' ', strtolower ($ data [0]))."' "; ' PHP: '" oxforduniversity", "Šiauliųuniversitetas", "harwarduniversity", "Žemaitijoskolegija", ' Anfangsbuchstabe ist nicht Fall gesenkt, irgendwie ... ich bin etwas fehlt? – Gumuliokas

+0

Wie ich in meiner Antwort geschrieben habe, müssen Sie mit Unicode den Modifikator '/ u' regex und' mb_strtolower() 'verwenden, um Unicode-Buchstaben in Kleinbuchstaben umzuwandeln. –

0

hanks Jungs, aber ich zu einem anderen Problem gestoßen, kann ich nicht Folgen übereinstimmen, wenn es specifik Symbole ist,

hier ist meine Ausgabe von Postgres SQL:

SQL:

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

Ausgang:

Aber in PHP ausgegeben ist ein bisschen anders: Ich habe meine Array mit Institutionen:

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

Und PHP Ausgänge wie folgt aus:

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

Anfangsbuchstabe ist nicht Fall abgesenkt wird, irgendwie ... Ich vermisse etwas?

Verwandte Themen