2016-12-22 2 views
1

Ich brauche den Text begrenzt durch "~ (Zahl von 0 bis 13)" und endet bei "~ Ende" jede Position des Arrays sollte den Text haben, der zwischen den geschweiften Klammern ist. Hat jemand eine Idee?PHP-Text zu Array Regex

TEXT: (Das Original hat einen Text See und vielleicht html)

~0 
    aaaaaa1 
    aaaaaaaaaa 
    ~1 
    bbbbbbbbbb 
    sdf23 
    324 <br> 
    sdfs 
    ~2 
    cccccccccc 
    ~3 
    ddddddddddd 

    ~13 
    eeeeeeeeeee 

    ~14 
    fffffffffff 
      ~end 

END Array:

Array 
       (
        [0] => aaaaaa1 
          aaaaaaaaaa 

        [1] => bbbbbbbbbbb 
          sdf23 
          324 <br> 
          sdfs 

        [2] => cccccccccc 

        [3] => dddddddddd 
        . 
        . 
        . 
        . 
        [13] => eeeeeee 

        [14] => fffffff 


       ) 

Meine PHP mit regex: (gescheitert)

$texto = " 
~0 
    123hola321 
    yyyyyyyyyyy 
    ~1 
    rrrrrrrrrrrr 
    sdf23 
    324 <br> 
    sdfs 
    ~2 
    cccccccccc 
    ~3 
    ddddddddddd 

    ~13 
    ddddddddddd 

    ~14 
    ddddddddddd 
      ~end "; 


$regex = '/^~(\d{1,2}.\n)(.*?)/m'; 
echo $regex; 
preg_replace($regex,$texto,$matches); 


echo "<pre>"; 
print_r($matches); 
echo "</pre>"; 

//  ^~(\d{1,2}.\n)  

// ~\d{1,2} (.*?)2$ 
// 
// ^~\d{1,2}(.*?)end$ 

thx

+0

Do 'preg_split ("/~ [0-9] +/", $ texto);' – JustOnUnderMillions

Antwort

0
$texto = " 
~0 
123hola321 
yyyyyyyyyyy 
xxxxxxxx 
ffffffffff 
~1 
rrrrrrrrrrrr 
~2 
cccccccccc 
~3 
ddddddddddd 

~3 
ddddddddddd 
     ~end "; 


$arr = preg_split('#~\d{1,2}.(\r\n|\n|\r)#', $texto); 

echo "<pre>"; 
print_r($arr); 
echo "</pre>"; 
+1

Bitte erläutern Sie, was der Fehler bei dem Versuch des OPs war und wie Ihr Code diesen Fehler behebt. –

1

Ich würdeverwendenstattdessen:

$arr = preg_split('/~\d{1,2}/', $texto); 

Keine Notwendigkeit, alles dazwischen zu erfassen.

Natürlich funktioniert das nur, wenn die Schlüssel sequentiell sind und bei 0 oder beginnen, sind sie egal.

Bearbeiten: Wenn Sie die resultierenden Zeichenfolgen in den Prozess trimmen möchten, sollten Sie kein Zeichen der Regex, den Punkt .; Dies kann gültige Zeichen aus Ihren Ergebnissen entfernen.

Stattdessen entfernen nur den Leerraum mit diesem:

$arr = preg_split('/\s*~\d{1,2}\s*/', $texto); 

\s* bedeutet 0 auf eine beliebige Anzahl von Leerraumzeichen (Leerzeichen, Tabulatoren, Zeilenumbrüche, etc.).

+1

dies hilft mir, eine Lösung zu finden. Vielen Dank !! Gracias;) –

+0

@VictorMoscosoLembcke Siehe meine Bearbeitung. – jeroen