Regulärer Ausdruck - Frage
Chris
- php
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
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
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