Bobbi: string auslesen

Hallo Leute,

ich habe einen String:
{test}01-23{test}

Aus diesem String möchte ich jetzt nur "01-23" auslesen. {test} ist jedoch immer unterschiedlich lang.

Kann mir einer helfen, ich weiss echt nicht, wie ich das lösen soll.

mfg
Bobbi

  1. Hello out there!

    ich habe einen String:
    {test}01-23{test}

    Aus diesem String möchte ich jetzt nur "01-23" auslesen. {test} ist jedoch immer unterschiedlich lang.

    Kann mir einer helfen, ich weiss echt nicht, wie ich das lösen soll.

    Nein, solange du echt nicht weißt, wie du das beschreiben sollst.

    Stehen dort immer geweifte Klammern? Möchtest du nach zwei Ziffern gefolgt von '-' gefolgt von zwei Ziffern suchen?

    See ya up the road,
    Gunnar

    --
    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
    1. also ein string kann zB so aussehen:
      abcdefghijklmn98-20ogfkerdfnsdmsdfg

      habe gesehen, dass es mit der funktion preg_match() geht.
      Doch ich verstehe nicht ganz, in welche Klammern welcher Wert kommt, es gibt ja [], () und {}. In den () steht ja das, was ich später erhalte. Mit [] lege ich fest, welche Zeichen enthalten sind, richtig?
      Und wofür sind {}? Für die Länge?

      1. Hallo Bobbi.

        habe gesehen, dass es mit der funktion preg_match() geht.
        Doch ich verstehe nicht ganz, in welche Klammern welcher Wert kommt, es gibt ja [], () und {}. In den () steht ja das, was ich später erhalte. Mit [] lege ich fest, welche Zeichen enthalten sind, richtig?
        Und wofür sind {}? Für die Länge?

        Absolut lesenswert hierzu ist das Tutorial beim RegExp–Evaluator.

        also ein string kann zB so aussehen:
        abcdefghijklmn98-20ogfkerdfnsdmsdfg

        Dies ließe sich aber noch immer mit einfachen Zeichenkettenfunktionen umsetzen. Wichtig ist hierbei nur, ob der „-“ _zwingend_ immer vorhanden ob die beiden Zahlen davor und dahinter _zwingend_ immer zweistellig sind.

        Wenn du beides mit „ja“ beantworten kannst, genügen strpos und substr, wie dedlfix bereits schrieb. Hierbei suchst du ganz einfach die Position von „-“ und extrahierst aus der gesamten Zeichenkette nun alles von der Fundstelle von „-“ minus zwei (ersten zwei Ziffern) mit einer Länge von fünf Zeichen. (Beide Ziffern zuzüglich „-“.)

        Einen schönen Montag noch.

        Gruß, Ashura

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]
        1. Hallo Gunnar™.

          […] mit einer Länge von fünf Zeichen. (Beide Ziffern zuzüglich „-“.)

          Natürlich meinte ich hier „Beide Zahlen …“.

          Einen schönen Montag noch.

          Gruß, Ashura

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
          [HTML Design Constraints: Logical Markup]
      2. Hallo Bobbi,

        also ein string kann zB so aussehen:
        abcdefghijklmn98-20ogfkerdfnsdmsdfg

        habe gesehen, dass es mit der funktion preg_match() geht.

        Das ist schon mal ein guter Anfang. Mit preg_match() kannst du nach bestimmten Mustern suchen und die gefundene Stelle in ein "Treffer-Array" eintragen.

        Doch ich verstehe nicht ganz, in welche Klammern welcher Wert kommt, es gibt ja [], () und {}. In den () steht ja das, was ich später erhalte.

        Die runden Klammern dienen erstmal dazu, um Teilausdrücke (oder Unterausdrücke) innerhalb eines Suchmusters zu Gruppen zusammenzufassen. Auf diese geklammerten Teilbereiche kann man später zurückgreifen. In preg_match() kann man das z.B. tun, in dem man das oben erwähnte Treffer-Array übergibt. Dort stehen dann die Teilausdrücke aufgeführt.

        Mit [] lege ich fest, welche Zeichen enthalten sind, richtig?

        Das nennt sich Zeichenklasse, "character class" oder ähnlich ...

        Und wofür sind {}? Für die Länge?

        Für die Anzahl der zu suchenden Zeichen. Die Syntax ist {min,max}. Es gibt aber auch diverse Kurzschreibweisen und Ersatzzeichen dafür.

        Ich sach ma' so: Du willst aus einem String eine Zeichenkettenkombination rausfischen, die man folgendermaßen beschreiben könnte:
        1. Sie beginnt mit einer Zahl (eine oder mehrere Ziffern).
        2. Sie enthält als nächstes ein Minus "-".
        3. Sie enthält als letztes wiederum eine Zahl (mit einer oder mehreren Ziffern).

        Das sieht, in ein PCRE-Suchmuster umgesetzt, so aus:
        '/\d+\-\d+/'

        Die Erklärung dazu:
        '\d' eine Ziffer
        '+' das vorherige Muster ein oder mehrere Mal
        '-' das Minus
        Statt '\d' kann man auch '[0-9]' schreiben, das würde dann eine Zeichenklasse definieren, die die Ziffern von 0 bis 9 enthalten darf.

        Jetzt machen wir PHP-Code draus:

          
        $heuhaufen = 'abcdefghijklmn98-20ogfkerdfnsdmsdfg';  
          
        if( !preg_match('/\d+\-\d+/', $heuhaufen, $rx_matches) ) {  
          print('Nichts gefunden');  
        }  
        else {  
          print('Ich habe ein Muster entdeckt!');  
          // Das Array mit dem/den gefundenen Muster(n) ausgeben  
          print_r($rx_matches);  
        }  
        
        

        Wichtige Information zum Thema reguläre Ausdrücke (PCRE) findest du auf den folgenden Seiten:
        http://regexp-evaluator.de/tutorial/
        http://www.php-resource.de/tutorials/read/10/1/

        Wikibook: Websiteentwicklung/PHP/Reguläre_Ausdrücke
        PCRE.org (englisch)

        und im PHP-Handbuch:
        PCRE-Suchmuster-Syntax
        PCRE-Suchmuster-Modifikatoren

        MffG
        EisFuX

  2. echo $begrüßung;

    {test}01-23{test}
    Aus diesem String möchte ich jetzt nur "01-23" auslesen. {test} ist jedoch immer unterschiedlich lang.

    Kann mir einer helfen, ich weiss echt nicht, wie ich das lösen soll.

    Finde das erste "}" beginne den String am folgenden Zeichen auszuschneiden. Ende am "{" welches nach der Position des ersten "}" im String vorkommt. substr() und strpos() sind zwei dafür geeignete Funktionen.

    echo "$verabschiedung $name";