Behandeln von zitierten Wörtern als einzelne Wörter in PHP explodieren
Wie können wir eine Zeichenfolge, wie unten gezeigt, mit explosion() while zerlegen? Zitierten Text als einzelne Wörter beibehalten?
Lorem ipsum "dolor sit amet" consectetur "adipiscing elit" dolor
Erwartet Ausgabe:
["Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor"]
Trotz Versuchen mit dem folgenden Code segmentiert die aktuelle Implementierung jedes Wort in der Zeichenfolge:
$mytext = "Lorem ipsum %22dolor sit amet%22 consectetur %22adipiscing elit%22 dolor" $noquotes = str_replace("%22", "", $mytext"); $newarray = explode(" ", $noquotes);
Lösung:
Um zitierte Wörter als einzelne Einheiten genau zu erfassen, können wir sie nutzen preg_match_all():
$text = 'Lorem ipsum "dolor sit amet" consectetur "adipiscing \"elit" dolor'; preg_match_all('/"(?:\\.|[^\\"])*"|\S+/', $text, $matches); print_r($matches);
Diese verfeinerte Syntax verarbeitet sogar maskierte Anführungszeichen in Anführungszeichen.
Aufschlüsselung von Regex:
"(?: # Start non-capture group 1 \ # Match backslash character . # Match any character except line breaks | # Or [^\"] # Match any character except backslash and double quotes )* # End non-capture group 1 and repeat it zero or more times " # Match double quotes | # Or \S+ # Match one or more non-whitespace characters
Umgang mit „ statt doppelter Anführungszeichen:
Sollte Wenn Sie sich mit „ anstelle von doppelten Anführungszeichen befassen müssen, verwenden Sie diesen angepassten regulären Ausdruck:
preg_match_all('/%22(?:\\.|(?!%22).)*%22|\S+/', $text, $matches);
Das obige ist der detaillierte Inhalt vonWie bleibt zitierter Text als einzelne Wörter erhalten, wenn PHPs explosion() verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!