[php] Vorkommen einen String in eine Variable speichern

MarcDK

Banned
Registriert
Mai 2001
Beiträge
3.559
Ich dachte erst, es wäre einfach aber ist es anscheindend doch nicht.
Ich möchte aus einem Text einen String rausfiltern und in eine Variable speichern.

Beispiel:

hasdhjas adsha ghdashgdag dasgda gsdasdgha gsdjhsagd hagsd "http://xxxxxxxxx" ajdashjajskdaskjhdjkashdjhajshdkashjkdajkshd akdah djsad hakdhja hjajks hjkashdkjsahjk a hsdasdhas

Ich will http://xxxxxxxxx nachher in meiner Variable stehen haben.

Ich weiß:

Die String fängt mit "http:// an und hört mit " auf

Wie geht man da ran? Geht man durch und prüft auf das erste vorkommen von "http:// und geht dann +1 immer weiter bis " und speichert dann immer das letzte Zeichen in die Variable?

Das ist doch eigentlich eine banale Aufgabe! Kann mir jemand helfen? Vielleicht sogar in OO in php5? Dann lerne ich noch mehr. =)
 
Ich kenne mich mit dieser preg_match() Funktion nicht besonders aus, aber das Suchmuster, das ich zusammengebastelt habe, funktioniert zumindest mit deinem Teststring.

PHP:
<?php
	error_reporting(E_ALL);


	$string = "hasdhjas adsha ghdashgdag dasgda gsdasdgha gsdjhsagd hagsd \"http://xxxxxxxxx\" ajdashjajskdaskjhdjkashdjhajshdkashjkdajkshd akdah djsad hakdhja hjajks hjkashdkjsahjk a hsdasdhas";	
	
	preg_match("/\"http:\/\/(.*)\"/i", $string, $treffer);
	
	echo "<pre>\n";
	print_r($treffer);
	echo "</pre>\n";
?>
Das Ergebnis steht halt in $treffer[0].

Ein Problem tritt allerdings aus, wenn es mehrere Übereinstimmungen im Text gibt. Er nimmt dann alles von der ersten bis zur letzten Übereinstimmung.
Als Beispiel kannst du mal den String nehmen:
PHP:
$string = "hasdhjas adsha \"http://abc\" ghdashgdag dasgda gsdasdgha gsdjhsagd hagsd \"http://xxxxxxxxx\" ajdashjajskdaskjhdjkashdjhajshdkashjkdajkshd akdah djsad hakdhja hjajks hjkashdkjsahjk a hsdasdhas";
Jetzt siehst du was ich meine.
 
PHP:
<?php
    error_reporting(E_ALL);


	$string = "hasdhjas adsha \"http://abc\" ghdashgdag dasgda gsdasdgha gsdjhsagd hagsd \"http://xxxxxxxxx\" ajdashjajskdaskjhdjkashdjhajshdkashjkdajkshd akdah djsad hakdhja hjajks hjkashdkjsahjk a hsdasdhas";     
    preg_match("/\"http:\/\/(.*)\"/iU", $string, $treffer);
    
    echo "<pre>\n";
    print_r($treffer);
    echo "</pre>\n";
?>

Einfach ein großes U bei den Parametern der preg_march-Funktion schreiben und er nimmt nur soviel vom Text, wie für die Expression unbeding nötig ist (Google-Stichwort: "Ungreedy").
 
Zuletzt bearbeitet:
So hab ich das auch schon versucht, aber das Problem ist, dass er dann nur bis zum ersten Vorkommen geht.
Die Ausgabe ist also:
Code:
Array
(
    [0] => "http://abc"
    [1] => abc
)
 
So ging es dann:

Code:
$text = $_POST['text'];

$anfang = strpos($text,'"http:');
$ab_http = substr($text,$anfang+1);
$ende = strpos($ab_http,"\"");
$http_string = substr($ab_http,0,$ende);

Danke =)
 
Hm nagut. Damit bekommst du aber auch nur das erste Vorkommen des Musters.
 
Zurück
Oben