2017-07-09 7 views
1

ich den folgenden Code bin mit meiner UTF-8-Strings Zeichen aufzuspalten:preg_split jedes Zeichen, aber nicht, wenn geteilt Zitat ist

$characters = preg_split('//u', $word, -1, PREG_SPLIT_NO_EMPTY); 

In einigen Fällen kann ein Zeichen könnte einen Apostroph haben Danach. zum Beispiel: hel'lo. Ich möchte dieses Zitat mit dem Charakter davor behalten.

Mit der Regex oben, mein Array dies:

Array 
(
    [0] => h 
    [1] => e 
    [2] => l 
    [3] => ' 
    [4] => l 
    [5] => o 
) 

Und ich möchte das Array sein:

Array 
(
    [0] => h 
    [1] => e 
    [2] => l' 
    [3] => l 
    [4] => o 
) 

Wie kann ich es tun? Danke!

(das einfache Anführungszeichen kann am Anfang der Zeichenfolge stehen, am Ende davon und in der Mitte davon).

+0

Ich würde 'preg_split' nicht verwenden, wenn Sie mit UTF8-Strings arbeiten. Ich würde 'preg_match_all (" ~ \ X '? ~ U ", $ s, $ m)' empfehlen, um alle Unicode-Zeichen mit einem optionalen '' 'nach ihnen zu erhalten. Ihre anderen Fälle mit einem ersten '' 'sind mir nicht klar, bitte fügen Sie Details zu der Frage hinzu. –

+0

Bitte zeigen Sie Ihre erwarteten Ergebnisse, wenn Sie "Hallo" und "Hallo" teilen. Bei der ersten Probe gibt es kein Zeichen vor dem einfachen Zitat - sollte das "" für sich allein sein oder an das "h" gebunden sein? – mickmackusa

Antwort

0

Anstatt split, können Sie preg_match_all

'?\p{L}'? 

dh eine optionale ' vor und nach dem Buchstaben der Verwendung von Unicode tun:

preg_match_all("/'?\\p{L}'?/u", $str, $matches); 

RegEx Demo

0

Verwenden ! von Split

zu verhindern
$characters = preg_split("/(?!')/u", $word, -1, PREG_SPLIT_NO_EMPTY); 
Verwandte Themen