Xava: Wert aus String auslesen

Hallo!

Ich habe folgendes Problem: Ich habe einen String $str in dem mehrere Zeilen vorhanden sind. In einer Zeile steht Folgendes:

id: 0123456789

Der linke Teil "id:" ist immer konstant in seinem Wert. Die Zahl ist von variabler Länge.

Ich benötige nun diese Zahl. Wie kann ich das am geschicktesten anstellen?

  1. hi!

    das machst du glaube ich am besten mit substr!
    hier der link:

    http://www.selfphp.de/funktionsreferenz/string_funktionen/substr.php

    greetz
    MakkuZ

    1. Hallo MakkuZ!

      das machst du glaube ich am besten mit substr!

      Prinziepell ja. Aber in diesem Fall muss man erst die Zeile finden.
      D.h. den String zeilenweise auslesen. Dann mit einer RegEx auf das Format prüfen (Schlüsselwort: Zahlenwert) und dann den Zahlenwert auslesen. Schön wäre, wenn (zuviele) Leerzeichen am Zeilen Anfang und zwischen dem Schlüsselwort und dem Zahlenwert abgefangen werden könnten bzw. nicht zu Problem führen.

      1. Hallo Xava,

        Prinziepell ja. Aber in diesem Fall muss man erst die Zeile finden.

        dann hast du auch schon ereg()  und  preg_match()  probiert?

        Gruß
        Karin

        1. Habe mir jetzt mal folgendes ausgedacht:

          $str = "Hallo Welt\n"
                ."\r\n"
                ." id:   08154711";

          // Wagenrücklauf entfernen
          $str = preg_replace('/\r\n|\r|\n/', '\n', $str);

          // Zeilenweise auslesen und in ein Array legen
          $zeilen = preg_split("/\n/", $str);

          for ($i=0; $i<count($zeilen); $i++) {
             if (preg_match("/\s*id:\s[0-9]+/"i), $zeilen[$i]) {
                 // Ersetze Leerzeichen am Anfang und Ende durch NULL
                 $str_neu = $zeilen = preg_split("/(^\s)|(\s$)/", '', $zeilen[$i]);

          /* Ersetze alle Leerzeichen mit mehr als eins durch nur ein Leerzeichen */
                 $str_neu = $zeilen = preg_split("/\s{2,}/", ' ', $str_neu);

          $str_neu = substr($str_neu, 4, strlen($str_neu)-4);
                 break;
             }
          }

          echo $str_neu;

          Würde dass funktionieren? Oder ist es zu Umständlich bzw. geht es einfacher?

          1. Nach einigen Test und Fehlerkorrekturen nun folgende funktionierende Lösung:

            $key = "id";

            $str = "Hallo Welt\n"
                   ."\r\n"
                   ." id:   08154711 ";

            // Wagenrücklauf entfernen
             $replace_str = "\n";
             $str = preg_replace('/\r\n|\r/', $replace_str, $str);

            // Zeilenweise auslesen und in ein Array legen
             $zeilen = preg_split("/\n/", $str);

            for ($i=0; $i<count($zeilen); $i++) {
                if (preg_match("/\s*id:\s+[0-9]+/i", $zeilen[$i])) {
                    // Ersetze Leerzeichen am Anfang und Ende durch NULL
                    $replace_str = "";
                    $str_neu = preg_replace("/(^\s)|(\s$)/", $replace_str, $zeilen[$i]);

            // Ersetze alle Leerzeichen mit mehr als eins durch nur ein Leerzeichen
                    $str_neu = preg_replace("/\s{2,}/", ' ', $str_neu);

            $str_neu = substr($str_neu, (strlen($key)+2), strlen($str_neu)-4);
                    break;
                }
             }

            echo $str_neu;

            Bleibt die Frage offen, ob es zu umständlich ist bzw. ob es eine einfachere Lösung gibt.

  2. Hallo Xava,

    Ich habe einen String $str in dem mehrere Zeilen vorhanden sind.
    Der linke Teil "id:" ist immer konstant in seinem Wert. Die Zahl ist von variabler Länge.
    Ich benötige nun diese Zahl. Wie kann ich das am geschicktesten anstellen?

    ob das am geschicktesten ist, weiß ich nicht, aber ich würde per
    substr
    http://de3.php.net/manual/de/function.substr.php
    den String nach  "id:" durchsuchen und den Rest ausgeben.

    hoffe, das hilft ein wenig

    Grüße
    Karin