• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

PHP: split regex

Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
PHP:
<?php
  $arr = split('/[\n]/', $string);
?>

Warum macht mir das nicht ein 3-Elemente-Array, wenn ich einen String "oneline\noneline\noneline\n" eingebe?
 
Mitglied seit
03.08.2002
Beiträge
5.740
Reaktionen
473
Original geschrieben von Sholvar
PHP:
<?php
  $arr = split('/[\n]/', $string);
?>

Warum macht mir das nicht ein 3-Elemente-Array, wenn ich einen String "oneline\noneline\noneline\n" eingebe?

den letzten zeilenumbruch weglassen?
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
ja entschuldige ich kriege keine vier elemente sondern eins!
das ist das problem. es wird überhaupt nicht bei \n gesplittet! :mad:
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
preg_split ist die lösung... ich hasse php -____-
 

voelkerballtier

Coverage, Staff, Coding
Mitglied seit
01.12.2003
Beiträge
1.603
Reaktionen
0
du musst die funktionen halt schon so benutzen wie sie gedacht sind sonst kann es nicht funktionieren, bei split wäre
split('[\n]', $s)
richtig gewesen, wie ein kurzer blick ins manual verrät.
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
das hab ich doch gemacht, bevor ich einen thread erstellt habe. aber der unit-test schlug trotzdem fehl. hast du das mal getestet?
 

voelkerballtier

Coverage, Staff, Coding
Mitglied seit
01.12.2003
Beiträge
1.603
Reaktionen
0
grad probiert und es geht nicht :(
da steckt noch ein weiterer fehler, den ich auch übersehen hab. Richtig ist:
split("/[\n]/", "oneline\noneline\noneline\n");
Wichtig ist die Verwendung von " anstelle von ', da php '\n' nicht als newline sonder als zwei zeichen \ und n interpretiert, d.h. beide strings müssen mit " " umschlossen werden, sonst gehts nicht :)
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
ah genau. das hatte ich auch schonmal woanders. Stimmt. Deshalb nutze ich auch eigentlich (theoretisch) nurnoch die "" ^^

Weiß einer welchen Sinn dieses Verhalten der '' Anführungszeichen hat?
 

voelkerballtier

Coverage, Staff, Coding
Mitglied seit
01.12.2003
Beiträge
1.603
Reaktionen
0
ich glaube der sinn ist, dass man dann nicht alles mögliche escapen muss um es auszugeben. Bei unvorsichtiger mischbenutzung kriegt man aber komische fehler, man sollte also wissen was man tut, oder konsequent " " nehmen.
 

killerchicken_inaktiv

Guest
Der Sinn von '' ist, dass man damit kein Zeichen ausser einem weiteren ' escapen muss - bei " ist das deutlich anders, man denke an $, \n, etc. In früheren Versionen war zudem '' deutlich spürbar schneller als ""
 

bog

Mitglied seit
02.08.2002
Beiträge
10.121
Reaktionen
0
Ort
auf dem mutterschiff
kleiner nachtrag/ fun fact: in ' ' werden demnach auch keine variablen geparsed.

weshalb der urspruengliche regex-ausdruck nicht funktioniert liegt daran, dass er perl regex-syntax benutzt (u.a. slashes als abgrenzungen), die split-funktion allerdings nicht. explode funktioniert uebrigens auch nur mit strings, nicht regulaeren ausdruecken
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
explode hab ich ja nur erwähnt, weil es für seinen zweck "zerlege bei jedem \n" auch ausreichen würde, da muss man ja net gleich mit schwerem regex geschützen feuern ;)
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
grade nochmal getestet, hier gehts

Code:
$arr = explode("\n", "blubb\nblub2");
print_r($arr);

outp: Array ( [0] => blubb [1] => blub2 )

€: mieser editer0r du
 

bog

Mitglied seit
02.08.2002
Beiträge
10.121
Reaktionen
0
Ort
auf dem mutterschiff
ja natuerlich gehts, \n ist auch kein regulaerer ausdruck, aber das vergisst man gerne mal bei 100 regex-modifiern
 
Oben