Bernd87: PHP preg_match

Hallo zusammen.

ich habe einen Variablensatz in der ungefähren Form:

sdfghsdfgVAR:0/1/0/2/0/3/0/4/0/0/10/11/12/1/0/1/0/1/2/2/3/2/4/2/5/37/37/28/255/3/0/0/0/0/:VARwrsgthsdrfghs

Wie man evtl. schon sieht möchte ich die Zahlen in einem Array speichern. Dazu verwende ich :

preg_match("/VAR:([0-9\/]*?):VAR/", $input_line, $output_array);

Wenn ich "http://www.phpliveregex.com/" Glauben schenken darf, erstellt er mir ein Array mit: (für den eventuellen Test: REGEX= VAR:([0-9/]*?):VAR)

[0] = VAR:0/1/0/2/0/3/0/4/0/0/10/11/12/1/0/1/0/1/2/2/3/2/4/2/5/37/37/28/255/3/0/0/0/0/:VAR
[1] = 0/1/0/2/0/3/0/4/0/0/10/11/12/1/0/1/0/1/2/2/3/2/4/2/5/37/37/28/255/3/0/0/0/0/

Was muss ich tun damit jede Zahl in einem eigenen Feld steht. Also:

[0] = 0
[1] = 1
[2] = 0  usw.

Danke im Voraus, Bernd

  1. Moin!

    So richtig wird nicht klar, was Du willst. Ich habe mal das geskriptet, wovon ich annehme, das es das ist, was Du willst:

    <?php
    
    ## Für die Ausgabe:
    if (! empty($_SERVER['DOCUMENT_ROOT']) ) {
       header('Content-Type:text/plain');
    }
    
    $input_line='sdfghsdfgVAR:0/1/0/2/0/3/0/4/0/0/10/11/12/1/0/1/0/1/2/2/3/2/4/2/5/37/37/28/255/3/0/0/0/0/:VARwrsgthsdrfghs';
    
    if ( preg_match("/VAR:([0-9\/]*?):VAR/", $input_line, $output_array) ) {
        print_r($output_array);
    
    
    #Array
    #(
    #    [0] => VAR:0/1/0/2/0/3/0/4/0/0/10/11/12/1/0/1/0/1/2/2/3/2/4/2/5/37/37/28/255/3/0/0/0/0/:VAR
    #    [1] => 0/1/0/2/0/3/0/4/0/0/10/11/12/1/0/1/0/1/2/2/3/2/4/2/5/37/37/28/255/3/0/0/0/0/
    #)
    
        $a=explode('/', $output_array[1]);
        print_r($a);
    
    } else {
        echo "Nichts gefunden.\n";
    }
    

    Jörg Reinholz

    1. Ja genau!!! Danke für den Ansatz!!! So hab ich das gemeint! Herzlichen Dank!!!

  2. Tach!

    ich habe einen Variablensatz in der ungefähren Form:

    sdfghsdfgVAR:0/1/0/2/0/3/0/4/0/0/10/11/12/1/0/1/0/1/2/2/3/2/4/2/5/37/37/28/255/3/0/0/0/0/:VARwrsgthsdrfghs

    Wie man evtl. schon sieht möchte ich die Zahlen in einem Array speichern.

    Wenn das vor und nach dem VAR die einzigen beiden Doppelpunkte sind (oder die Anzahl der Doppelpunkte vom Anfang des Strings aus gesehen immer konstant ist) würde ich explode(':', $var_satz) nehmen und nochmal explode('/', $teil_zwischen_den_doppelpunkten).

    Was muss ich tun damit jede Zahl in einem eigenen Feld steht. Also:

    Wenn es denn doch ein regulärer Ausdruck sein soll, dann musst du erstmal die Regel formulieren - in Worten zunächst, dann kann man Code draus machen.

    So wie das aussieht, hast du zwischen den VAR:...:VAR Ziffern (eine oder mehrere), die von einem / gefolgt werden (auch die letzte Zahl), und das in mehrfacher Ausführung. Nun noch die Gruppierungsklammern um die Ziffern setzen und dann sollte es passen.

    dedlfix.

    1. Also ich erhalte einen/den Datensatz von einer Website/Server.

      <?php  
      $ardu = @fopen("http://192.168.2.226", "r");
      
      if ($ardu) {  echo "Der Arduino-Blech ist verf&uumlgbar"; }
      
      else {  echo "Der Arduino-Blech ist nicht verf&uumlgbar"; }
      
      if ($ardu) {
      
      while (($buffer = fgets($ardu, 4096)) !== false) {
      
      $a=explode(':',$buffer );     echo $a;
      
      **// => Erzeugen eines string Arrays $a mit Feldinhalt [0]=":a/b/.../y/z/:" 
      //(welche Zahlen a-z auch immer sein mögen)
      //WENN ICH MICH NICHT IRRE?!?**
      
      
      $b=explode('/',$a);     echo $b;
      
      **// => Erzeugen einer string Array $b mit Feldern []="a";[]="b";... usw. 
      //WENN ICH MICH NICHT IRRE?!?**
      }
      
      fclose($ardu);
      
      }
      
      ?>
      

      Ich erhalte folgende Ausgabe:

      Der Arduino-Blech ist verfügbar

      Notice: Array to string conversion in 
      C:\TEST\pausensignal\website\Blech.php on line 310
      Array
      Warning: explode() expects parameter 2 to be string, array given in C:\TEST\pausensignal\website\Blech.php on line 311
      

      Wenn es denn doch ein regulärer Ausdruck sein soll, dann musst du erstmal die Regel formulieren - in Worten zunächst, dann kann man Code draus machen.

      Wenn doch regulärer Ausdruck/Required Exprecion: was ist damit gemeint??? Wie darf ich das verstehen?

      So wie das aussieht, hast du zwischen den VAR:...:VAR Ziffern (eine oder mehrere), die von einem / gefolgt werden (auch die letzte Zahl), und das in mehrfacher Ausführung. Nun noch die Gruppierungsklammern um die Ziffern setzen und dann sollte es passen.

      Was wird mit Gruppierungsklammern gemeint. Wo muss man diese setzen... Gibt es ein Bsp. ?

      1. Sieht so aus als ob das Problem mit dem ersten Response schon erledigt war;-)

        Es Funktioniert auf jeden Fall.

        Dennoch würde mich Ihr Ansatz noch interessieren.

        Danke

      2. Tach!

        if ($ardu) { echo "Der Arduino-Blech ist verf&uumlgbar"; }

        else { echo "Der Arduino-Blech ist nicht verf&uumlgbar"; }

        Nach &uuml fehlt ein ;
        Man muss aber keine Entitys verwenden, wenn man die verwendete Kodierung korrekt angibt.

        if ($ardu) {

        while (($buffer = fgets($ardu, 4096)) !== false) {

        $a=explode(':',$buffer ); echo $a;

        explode() erzeugt ein Array. Arrays können nicht mit echo ausgegeben werden, man kann aber print_r() und var_dump() verwenden.

        // => Erzeugen eines string Arrays $a mit Feldinhalt [0]=":a/b/.../y/z/:" //(welche Zahlen a-z auch immer sein mögen) //WENN ICH MICH NICHT IRRE?!?

        $b=explode('/',$a); echo $b;

        $a ist ein Array. Du kannst davon nur ein Element verwenden und nicht das gesamte Array.

        Wenn es denn doch ein regulärer Ausdruck sein soll, dann musst du erstmal die Regel formulieren - in Worten zunächst, dann kann man Code draus machen.

        Wenn doch regulärer Ausdruck/Required Exprecion: was ist damit gemeint??? Wie darf ich das verstehen?

        Wenn du reguläre Ausdrücke nicht verstehst, meide sie und nimm die einfachere explode-Methode. Alternativ nimm dir ein Tutorial dafür, das ist ein zu komplexes Thema für eine Forumsantwort.

        Da du aber anscheinend auch mit explode() nicht umgehen kannst, empfehle ich im PHP-Handbuch nachzulesen, was die Funktion macht. Es ist generell empfehlenswert, die in Antworten vorgeschlagenen Dinge nachzuschlagen. Einerseits kann die Problembeschreibung mangelhaft sein und die Antwort nicht zur eigentlichen Aufgabe passen, andererseits kann auch der Antwortende eine falsche Antwort gegeben haben.

        dedlfix.