preg_split soll Trenner behalten
AndreR
- php
Hallo,
ich habe hier eine Funktion, die unter Zuhilfenahme von preg_split einen Text anhand verschiedener Merkmale in ein Array aufteilt. Das klappt soweit auch perfekt.
Allerdings hätte ich gerne, dass die Trennzeichen nicht entfernt werden sondern erhalten bleiben und ebenfalls in das Array kopiert werden. Wie kann ich das denn erreichen?
Danke schon einmal.
André
Guten Morgen,
Allerdings hätte ich gerne, dass die Trennzeichen nicht entfernt werden sondern erhalten bleiben und ebenfalls in das Array kopiert werden. Wie kann ich das denn erreichen?
Indem Du Dir mal die moeglichen Parameter von preg_split genau durchliest.
Viele Gruesse,
der Bademeister
Indem Du Dir mal die moeglichen Parameter von preg_split genau durchliest.
Sofern du auf "PREG_SPLIT_DELIM_CAPTURE" hinaus willst - der hat keinen Einfluss zu haben. Jedenfalls bleiben die Trenner trotzdem verschollen.
Ich trenne gerade wie folgt:
$splits = preg_split($reg, $line, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
André
Hi AndreR!
Sofern du auf "PREG_SPLIT_DELIM_CAPTURE" hinaus willst - der hat keinen Einfluss zu haben. Jedenfalls bleiben die Trenner trotzdem verschollen.
Dann ließ dir die Beschreibung zu diesem Flag nochmal genau durch:
PREG_SPLIT_DELIM_CAPTURE
Falls dieses Flag gesetzt ist, werden auch die _eingeklammerten_
Ausdrücke des Trennsymbol-Suchmusters erfasst und zurückgegeben.
MfG H☼psel
Hallo Hopsel
Dann ließ dir die Beschreibung zu diesem Flag nochmal genau durch:
Danke für den Hinweis. Jetzt werden die Trennzeichen übernommen. Es gibt aber noch ein Problem: Die Trennzeichen werden dem getrennten Satz nicht angehängt sondern es werden im Array separate Einträge erzeugt. Lässt sich das irgendwie umgehen?
Danke,
André
Hi AndreR!
Die Trennzeichen werden dem getrennten Satz nicht angehängt sondern es werden im Array separate Einträge erzeugt. Lässt sich das irgendwie umgehen?
Die Frage ist, warum du das umgehen möchtest?
Mit preg_split hast du eben in jedem zweiten Arrayeintrag das jeweilige Trennzeichen. Und da du dieses Array mit einer for-Schleife der Schrittweite 2 durchlaufen kannst, sollte die Verarbeitung kein Problem darstellen.
Du kannst natürlich auch preg_match_all verwenden und das Suchmuster so aufbauen: Kein Trennzeichen in beliebiger Anzahl vielleicht gefolgt von einem Trennzeichen.
Beispiel:
$ip = '192.168.200.120';
$matches = array();
preg_match_all('~[^.]+(?:\.)?~',$ip,$matches);
MfG H☼psel
Hi Hopsel,
Mit preg_split hast du eben in jedem zweiten Arrayeintrag das jeweilige Trennzeichen.
hier muss man ein bissi aufpassen. Da Andre PREG_SPLIT_NO_EMPTY gesetzt hat, wird das nicht immer stimmen.
Viele Gruesse,
der Bademeister
Hi Bademeister!
Mit preg_split hast du eben in jedem zweiten Arrayeintrag das jeweilige Trennzeichen.
hier muss man ein bissi aufpassen. Da Andre PREG_SPLIT_NO_EMPTY gesetzt hat, wird das nicht immer stimmen.
Sehr wichtiger Hinweis. Danke!
In diesem Fall muss dieses Flag natürlich raus und in der for-Schleife entsprechend auf Leerheit™ geprüft werden.
MfG H☼psel
Moin,
Die Frage ist, warum du das umgehen möchtest?
Mit preg_split hast du eben in jedem zweiten Arrayeintrag das jeweilige Trennzeichen. Und da du dieses Array mit einer for-Schleife der Schrittweite 2 durchlaufen kannst, sollte die Verarbeitung kein Problem darstellen.
Ich bräuchte es halt genau in diesem Format für die Weiterverarbeitung. Und wenn man es direkt so ausgeben könnte erspare ich mir komplizierte Nachverarbeitung.
Ich kann es also nicht direkt in diesem Format spalten?
André
Hi AndreR!
Ich kann es also nicht direkt in diesem Format spalten?
Doch. Ich habe dir doch zwei Möglichkeiten genannt...
MfG H☼psel
Hi AndreR!
Ich kann es also nicht direkt in diesem Format spalten?
Doch. Ich habe dir doch zwei Möglichkeiten genannt...
... wobei eine davon die geüwnschte Funktionalität besitzt. =)
MfG H☼psel
Hi,
Jetzt werden die Trennzeichen übernommen. Es gibt aber noch ein Problem: Die Trennzeichen werden dem getrennten Satz nicht angehängt sondern [...]
Wo sollten sie denn "angehängt" werden, wenn du bspw. "abc|xyz" am | splittest - hinter dem abc, oder vor dem xyz ...?
Du siehst, diese Anforderung ist auch noch nicht eindeutig genug.
MfG ChrisB