2009-06-23 5 views
1

Ich versuche PHP split() zu verwenden (preg_split() ist auch eine Option, wenn Ihre Antwort damit arbeitet), eine Zeichenfolge auf 2 oder mehr \r\n zu teilen. Mein aktueller Aufwand ist:Regex mit mehreren Zeilenumbrüchen in Folge

split("(\r\n){2,}",$nb); 

Das Problem dabei ist es jedes Mal passt es 2 oder 3 \r\n ‚s, dann geht weiter und findet die nächste. Dies ist bei 4 oder mehr \r\n unwirksam.

Ich brauche alle Instanzen von zwei oder mehr \r\n 's gleich behandelt werden wie zwei \r\n' s. Zum Beispiel würde ich brauche

Hello\r\n\r\nMy\r\n\r\n\r\n\r\n\r\n\r\nName is\r\nShadow 

zu

werden
array('Hello','My','Name is\r\nShadow'); 

Antwort

0

Hinzufügen der PREG_SPLIT_NO_EMPTY Flagge zu preg_replace() mit Tomalaks Muster von "/(\\r\\n){2,}/" erreicht dies für mich.

2

preg_split()sollte tun es mit

$pattern = "/(\\r\\n){2,}/"; 
+1

ja, weil pcre standardmäßig "gierig" arbeitet, d. H. {2,} versucht so viele Zeichen wie möglich abzugleichen, während split() den Mustervergleich abbricht, sobald dieser erfüllt ist. – chendral

+0

Es hat damit nicht gemacht, aber ich habe das Flag PREG_SPLIT_NO_EMPTY gefunden, das dasselbe für meine Zwecke erreicht. –

+0

@chendral: Hm ... @ Gumbo's Antwort scheint etwas anderes zu bedeuten. – Tomalak

1

Was ist mit den folgenden Vorschlag:

$ nb = implode ("\ r \ n", array_filter (explode ("\ r \ n", $ nb)));

1

Es funktioniert für mich:

$nb = "Hello\r\n\r\nMy\r\n\r\n\r\n\r\n\r\n\r\nName is\r\nShadow"; 
$parts = split("(\r\n){2,}",$nb); 
var_dump($parts); 
var_dump($parts === array('Hello','My',"Name is\r\nShadow")); 

Drucke:

array(3) { 
    [0]=> 
    string(5) "Hello" 
    [1]=> 
    string(2) "My" 
    [2]=> 
    string(15) "Name is 
Shadow" 
} 
bool(true) 

Notiere die double quotes im zweiten Test durch \r\n die Zeichen dargestellt werden.

Verwandte Themen