Chris: Regulärer Ausdruck - Frage

Hallo,

ich habe einen String mit dem Inhalt:
$str = "text ganz viel text (GF650EA)noch viel mehr text • 19234 (2x 1922) • 160 • ...";
Den String möchte ich zerlegt haben, dass nur noch der Inhalt der ersten Klammer stehen bleibt, also "GF650EA". Wie bekomm ich das hin? Dass Dumme ist eben, dass es immer 2 Klammern gibt, aber ich brauche nur den Inhalt aus der ersten Klammer.

Versucht habe ich es so:
$str = preg_replace("/\(.*\)/", "\1" ,$str,1);

Aber dann löscht er mir irgendwie fast alles:
text ganz viel text  • 160 • ..

Was mach ich da alles falsch?

Grüße

Chris

  1. Hi,

    Was mach ich da alles falsch?

    Du verwendest einen gierigen RegExp. Schreibe anstatt ".*" ".*?".
    Ohne das "?" sucht der RegExp so viele Zeichen wie moeglich. Mit "?" sucht er einen so kurzen String wie moeglich.

    mfG,
    steckl

  2. Hallo Chris.

    ich habe einen String mit dem Inhalt:
    $str = "text ganz viel text (GF650EA)noch viel mehr text • 19234 (2x 1922) • 160 • ...";
    Den String möchte ich zerlegt haben, dass nur noch der Inhalt der ersten Klammer stehen bleibt, also "GF650EA". Wie bekomm ich das hin? Dass Dumme ist eben, dass es immer 2 Klammern gibt, aber ich brauche nur den Inhalt aus der ersten Klammer.

      
    // Position der ersten Klammer + Zeichenlänge dieser Klammer, also 1  
    $int_start = [link:http://de.php.net/manual/de/function.strpos.php@title=strpos]($str, '(') + 1;  
    // Position der ersten abzüglich Position der zweiten Klammer → Länge der Teilzeichenkette  
    $int_end = strpos($str, ')') - $int_start;  
      
    // Extrahieren & ausgeben  
    echo [link:http://de.php.net/manual/de/function.substr.php@title=substr]($str, $int_start, $int_end); // GF650EA
    

    Einen schönen Mittwoch noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules