Teilstring zwischen <test> und </test> auslesen

:morgen: allerseits,
Hab mal wieder eine Frage die mir Kopfzerbrechen bereitet…

Diesmal gehts um PHP, ich hab in einem String Text. Viel Text. :smiley:
Nun soll mir PHP den Inhalt ausgeben der im String zwischen und steht.

Könnte mir vorstellen das das irgendwie mit strstr und explode vonstatten gehen kann, hab aber ehrlichgesagt keine Ahnung… :neutral_face:

Wisst ihr weiter? Die Suchfunktion hat mir auch nix richtiges ausgespuckt…

Gruß

function cut_tags($trenner1, $trenner2, $text) { $wert = explode($trenner1, $text); $arr = explode($trenner2, $wert[1]); return $arr[0]; }

für trenner1 setzte
für trenner2 setzte
und für text die variable wo den string enthält

hey, ich könnt dich knutschen :smiley: Dankeschööön!!!

[quote=“amityville”]function cut_tags($trenner1, $trenner2, $text) { $wert = explode($trenner1, $text); $arr = explode($trenner2, $wert[1]); return $arr[0]; }

für trenner1 setzte
für trenner2 setzte
und für text die variable wo den string enthält[/quote]
Kleines Problem aufgetaucht… Ich hab mehrmals im String und
Allerdings liest deiner nur das erste aus… Gibts dafür noch eine passende Lösung?

maan… warum ihr immer sofort auf explode zurückgreifen müsst… -.-

$hits = array();
$string = "";

$beg = "<text>";
$end = "</text>";

$search = true;
for(;;) {
    $string = strstr($string, $beg);
    if($string === false) break;
    
    $string = substr($h, strlen($beg));
    $h = strstr($string, $end, true);
    if($h === false) break;
    $hits[] = $h;
}

print_r($hits);

Schneller als explode, lineare Ordnung, von einer Richtigkeit der Eingabe wird größtenteils ausgegangen :wink:

[quote]Warning: Wrong parameter count for strstr() in index.php on line 30
Array ( [0] => ) [/quote]

Wobei in String der Text steht den er durchsuchen soll…

Dann benutzt du wohl eine PHP-Version < 5.3.0, denn erst mit dieser wurde der dritte Parameter für strstr eingeführt.

(Das sind übrigens Sachen, die man auch durchaus mal selber im Manual nachlesen kann, oder?)

phpinfo(); spuckt mir aus: PHP Version 5.2.0-8+etch11

Gibts noch ne andere lösung?

Klar gibt’s die.

Schau dir die Stringfunktionen im Manual an, und bastle dir daraus was passendes.

substr und strpos

Und dann gäbe es da auch noch die Regulären Ausdrücke (Regular Expressions):
z.B.: de.php.net/preg_match_all

[quote=„freggle“]Und dann gäbe es da auch noch die Regulären Ausdrücke (Regular Expressions):
z.B.: de.php.net/preg_match_all[/quote]
BIST DU DES WAHNSINNS??? :ps:


Viel Spass ^^

Viel Spass ^^

Dann vergleich mal die Rechenleistung von deinem und meinem O.o

PHP hat einen äußerst ineffizienten Algorithmus zum Lösen von regulären Ausdrücken…

Außerdem würde der reguläre Ausdruck so sowiso nicht funktionieren, da immer versucht wird mit (.*) oder (.+) eine möglichst große Teilmenge abzubilden, das kann man mit (.+?) umgehen. //EDIT: Gut, der U-Modifier macht das gleiche, wird aber nur von PCRE unterstützt

Und genau deshalb sollte man die preg- statt der ereg-Funktionen benutzen :slight_smile:

PCRE ist auch nicht viel schneller als POSIX, und auf keinen Fall so schnell wie die einfachen String-Funktionen. Vor allem wenn die zu durchsuchende Zeichenkette lang ist.

Okay stimmt, aber ich denke für den Anfang ist es damit am einfachsten. In der Produktivphase kann man sich dann eine spezialisierte Funktion zusammenzimmern.

Wir beide wissen, dass niemand den Code im Nachhinein noch nach solchen Speed-Bremsen durchsucht :ps:

Jaaaa, aber RegExps sind so schön einfach :hammer:

das stimmt allerdings :smiley: