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: