wie benutze ich preg_split () in php?

8

Kann mir jemand erklären, wie man die Funktion preg_split () benutzt? Ich habe den Musterparameter wie diese "/[\s,]+/" nicht verstanden.

zum Beispiel:

Ich habe dieses Thema: is is. und ich möchte, dass die Ergebnisse lauten:

%Vor%

so wird es den Raum und den Punkt ignorieren, wie kann ich das tun?

    
MD.MD 12.06.2014, 16:42
quelle

4 Antworten

27

preg bedeutet P REG , was irgendwie redundant ist, da "PCRE" "Perl Compatible Regexp" bedeutet.

Regexps sind ein Albtraum für den Anfänger. Ich verstehe sie immer noch nicht und arbeite seit Jahren mit ihnen.

Das Beispiel, das Sie dort haben, ist im Wesentlichen:

%Vor%

Sie haben also ein Suchmuster, das "auf jeden Teil der Zeichenfolge aufgeteilt ist, der mindestens ein Leerzeichen und / oder ein oder mehrere Kommas enthält".

Andere häufige Zeichen sind:

%Vor%

Für PHP gibt es gute Informationen in der offiziellen Dokumentation .

    
Majenko 12.06.2014, 16:50
quelle
6

Das sollte funktionieren:

%Vor%

Die Ausgabe wäre:

%Vor%

Bevor ich die Regex erkläre, nur eine Erklärung zu PREG_SPLIT_NO_EMPTY . Das bedeutet im Grunde, dass nur die Ergebnisse von preg_split zurückgegeben werden, wenn die Ergebnisse nicht leer sind . Dies stellt sicher, dass die im Array $words zurückgegebenen Daten wirklich Daten in & amp; nicht nur leere Werte, die beim Umgang mit Regex Pattern & Amp; gemischte Datenquellen.

Und die Erklärung dieser Regex kann wie folgt zerlegt werden: dieses Tool :

%Vor%

Eine schönere Erklärung finden Sie, wenn Sie das vollständige Regex-Muster von /(?<=\w)\b\s*[!?.]*/ in diesem anderen Tool eingeben:

  • (?<=\w) Positive Lookbehind - Stellen Sie sicher, dass die unten angegebene Regex gefunden werden kann
  • \w entspricht einem beliebigen Wortzeichen [a-zA-Z0-9_]
  • \b setzt Position an einer Wortgrenze (^\w|\w$|\W\w|\w\W)
  • \s* entspricht einem Leerzeichen. [\r\n\t\f ]
  • Quantifizierer: Zwischen null und unbegrenzten Zeiten, so oft wie möglich, nach Bedarf zurückgeben [gierig]
  • !?. ein einzelnes Zeichen in der Liste !?. wörtlich

Diese letzte Regex-Erklärung kann von einem Menschen - auch bekannt als ich - wie folgt verkocht werden:

Match-and-split - jedes Wortzeichen, das vor einer Wortgrenze steht, die mehrere Leerzeichen und die Interpunktionszeichen von !?. haben kann.

    
JakeGould 12.06.2014 16:45
quelle
1

PHP str_word_count könnte hier eine bessere Wahl sein.

str_word_count($string, 2) gibt ein Array aller Wörter in der Zeichenfolge aus, einschließlich Duplikaten.

    
ceejayoz 12.06.2014 16:54
quelle
1

Dokumentation sagt:

  

Die Funktion preg_split () funktioniert genau wie split (), außer dass   Reguläre Ausdrücke werden als Eingabeparameter für Muster akzeptiert.

Also, der folgende Code ...

%Vor%

Dies wird folgendes Ergebnis erzeugen.

%Vor%

Also, wenn dieses Thema: is is und Sie wollen: Array (   0 = & gt; "ist",   1 = & gt; "ist", )

Sie müssen Ihre Regex in "/[\s]+/"

ändern

Wenn Sie nicht is ,is haben, brauchen Sie die Regex, die Sie bereits haben "/[\s,]+/"

    
Federico Piazza 12.06.2014 16:46
quelle

Tags und Links