2016-06-07 3 views
0

Ich habe Probleme mit diesem Stück Code. Was es tun sollte, ist eine Zeichenkette zu nehmen, sie nach Wörtern zu teilen und dann gegen ein Wörterbuch zu prüfen. Wenn die Saite jedoch ein "Umlaut" Ääööüü enthält, teilt es sich dort auf.Regexp und pspell_check mit UTF-8 (Umlaute)

Ich bin mir ziemlich sicher, das Problem ist [A-ZäöüÄÖÜ\'] es scheint, ich bin die speziellen Charackters falsch, aber wie?

$string = "Rechtschreibprüfung";  
preg_match_all("/[A-ZäöüÄÖÜ\']{1,16}/i", $string, $words); 
for ($i = 0; $i < count($words[0]); ++$i) { 
    if (!pspell_check($pspell_link, $words[0][$i])) { 
     $array[] = $words[0][$i];    
    } 
} 

Ergebnis:

$array[0] = Rechtschreibprü" 
$array[1] = "fung" 
+0

Sie müssen nur ' '/ \ p {L} +/u '' –

+0

@ WiktorStribiżew Dank scheint zu arbeiten, Pflege, um als Antwort zu posten? Da ich diese Dinge nie richtig lesen kann? – Shaeldon

Antwort

1

Um ein Stück von Unicode Buchstaben übereinstimmen, können Sie

'/\p{L}+/u' 

Die \p{L} entspricht einem beliebigen Unicode Buchstaben verwenden, + für ein oder mehrere occurrenes der vorhergehenden Untermuster und der Modifikator /u behandelt das Muster und die Zeichenfolge als Unicode-Zeichenfolgen.

nur um ganze Wörter zu entsprechen, verwenden Wortgrenzen:

'/\b\p{L}+\b/u' 

Wenn Sie diakritische Zeichen haben, fügen Sie auch \p{M}:

'/\b[\p{M}\p{L}]+\b/u'