preg_replace mit Funktion kombinieren

therealcharlie

Erfahrenes Mitglied
Ich hole mir mit
Code:
$pattern= '/\b[\w\d._-]+@[\w\d][\w\d.-]{0,61}[\w\d]\.[\w.]{2,6}\b/';
		$replace = '$0';
		$string = preg_replace($pattern, $replace, $string);
die email-adressen aus einem string. Das funktioniert ganz hübsch. jetzt habe ich noch eine funktion geschrieben, die mir bestimmte Zeichen ersetzt. Die Funktion auf einen string angewendet funktioniert ebenfalls. Allerdings bringt der Code
Code:
$pattern= '/\b[\w\d._-]+@[\w\d][\w\d.-]{0,61}[\w\d]\.[\w.]{2,6}\b/';
		$replace = '$0';
		$string = preg_replace($pattern, myfunction($replace), $string);
keine Ausgabe mehr. Hat irgendjemand einen Denkanstoß für mich? Danke schonmal.
 
wie sieht denn die Funktion myfunction aus?
Stimmt der Rückgabewert denn (d.h., würde der Rückgabewert direkt eingesetzt zum gewünschten Ergebnis führen)?
 
Zuletzt bearbeitet:
ja, die funktion alleine funktioniert problemlos z.b. mit
Code:
myfuntion('mail@mailto.de');
die Funktion sieht etwa so aus:
Code:
function myfunction($text) {
$result = str_replace($search, $replace, $text);
return $result;
}
zuvor werden natürlich noch search und replace definiert.
 
Habe ich das richtig verstanden, dass du den regex am ursprünglichen text getestet hast, und nicht am Ergebnis von str_replace? Passt denn der regex auch auf die Ausgabe? Oder habe ich das falsch verstanden ?
 
Also nochmal von vorne.
Ich habe einen string, da kommen Mail-Adressen drin vor. welche auch immer.
Diese Filtere ich mit
Code:
$pattern='/\b[\w\d._-]+@[\w\d][\w\d.-]{0,61}[\w\d]\.[\w.]{2,6}\b/';
$replace = '$0';
$string = preg_replace($pattern, $replace, $string);
heraus. das funktioniert problemlos. Hat aber in dieser Form wenig Sinn, da ja dasselbe wieder dasteht wie vorher. nämlich die Mail-adresse. Deshalb will ich das ergebnis, also $replace, was ja $0 ist, durch meine Funktion jagen. Die Funktion funktioniert auch, wen man ihr den Wert als string manuell übergibt. in der Form
Code:
$pattern='/\b[\w\d._-]+@[\w\d][\w\d.-]{0,61}[\w\d]\.[\w.]{2,6}\b/';
$string = preg_replace($pattern, myfunction('0'), $string);
funktioniert es allerdings nicht mehr.da ich ja den Wert von $0 auch nicht in eine variable laden kann (oder doch?), muss die Funktion meines erachtens ja innerhalb des preg_replace befehls aufgerufen werden....
 
ja, irgendwie hab ich da nen Denkfehler drin gehabt...
aber bei mir erzeugt
PHP:
<?
function myfunction($text) {
$result = str_replace($search, $replace, $text);
return $result;
}

$string="tralala ich@du.de blabla ";
$pattern='/\b[\w\d._-]+@[\w\d][\w\d.-]{0,61}[\w\d]\.[\w.]{2,6}\b/';
$string = preg_replace($pattern, myfunction('0'), $string);
echo $string;
?>

die Ausgabe:
tralala 0 blabla

Ist das nicht das, was du haben wolltest?
 
nein, ich will ja die gefilterte mail-adresse bearbeiten/verändern.
i der funktion sind oben natürlich noch search und replace definiert. Das ganze ist eigentlich ein experiment bezüglich mail-schutz mittels einfachem algorythmus.
Die mailadresse wird also übergeben, zerpflückt und neu zusammengesetzt. aber ich bekomm die mailadresse nicht in die funktion....verständlich, was ich meine?
 
leider nein. ich bin schon ein stück weiter, anscheinend kann ich die variable nicht bearbeiten.
Mein code sieht im ganzen so aus:
PHP:
function algo($string)	{
			//$text = strtolower($text);
			$algo_search = array('1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','.','-','_','@');
			$algo_replace = array('a','b','c','d','e','f','g','h','i','j','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39');

			$result = str_replace($algo_search, $algo_replace, $string);
			return $result;
		}

		$pattern= '/\b[\w\d._-]+@[\w\d][\w\d.-]{0,61}[\w\d]\.[\w.]{2,6}\b/';
		$replace = '<a href="mailto:$0">$0</a>';
		$string = preg_replace($pattern, '<a href="mailto:'.algo("$0").'">$0</a>', $string);
wozu das dienen soll, ist ja nebensächlich. wen ich in der funktion algo allerdings vor dem str_replace eine mail-adresse definiere, auch, wenn es dieselbe ist, dann funktioniert es. kommt die adresse aus dem preg_replace, funkt es nicht... ich bin echt schon am verzweifeln.
 
Kleine Frage: Fangen die gefunden Ergebnisse nicht bei 1 an? Demnach müsste es doch $1 statt $0 heißen!
 
Zurück