2017-03-12 2 views
0

Ich habe Eingabezeichenfolgen wie dieseWie man Zeichenkette durch Symbole mit Regex austeilen?

"CC", 5 "B7C15", "B4C8"

gespalten ich über preg_split Methode, um diese Zeichenfolgen aus. Aber wenn Eingabe-String $str = 'CC'; Methode funktioniert nicht. My der Code:

preg_split('/(\\d+)/', $string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 

ich das Ausgabeergebnis:

array(4) { 
    [0]=> 
    string(1) "B" 
    [1]=> 
    string(1) "7" 
    [2]=> 
    string(1) "C" 
    [3]=> 
    string(2) "15" 
} 
array(1) { 
    [0]=> 
    string(1) "5" 
} 
array(4) { 
    [0]=> 
    string(1) "B" 
    [1]=> 
    string(1) "4" 
    [2]=> 
    string(1) "C" 
    [3]=> 
    string(2) "8" 
} 

Statt den Folge Ergebnisse als:

array(1) { 
    [0]=> 
    string(2) "CC" 
} 

ich als die Folge Ergebnis erhalten müssen:

array(2) { 
    [0]=> 
    string(1) "C" 
    [1]=> 
    string(1) "C" 
} 

Danke für ein Dvance.

+1

Warum verwenden Sie nicht 'preg_match_all' statt dessen? – ManzoorWani

+0

Suchen Sie nach vorhandenen CSV-Parsing-Tools, anstatt eigene zu rollen. –

Antwort

0

Vorausgesetzt, Sie müssen alle nicht-stellige Zeichenfolge in eine char Elemente aufgeteilt, nur (\D) (eine einzelne nicht-stellige char-Gruppe) hinzufügen müssen als Alternative zu Ihrem regex:

preg_split('/(\\d+)|(\D)/', $string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 

Demo: https://regex101.com/r/zFHybU/1

+0

Vielen Dank :) –

2

Ein besserer Ansatz wäre die Verwendung:

preg_match_all('/(\d+)|([a-z])/i', $string, $matches); 

print_r($matches); 
0

Das Dateiformat an den Sie suchen ist CSV genannt, und viele gotchas in Parsing hat. Anstatt einen eigenen Parser mit einer Regex zu schreiben, sollten Sie vorhandene Werkzeuge verwenden. Wenn Sie diese aus einer Datei lesen, verwenden Sie die in PHP integrierte Funktion fgetcsv.

Verwandte Themen