preg_match() - Probleme

hab1cht

Erfahrenes Mitglied
Hallo,
ich habe einen Text ($text) indem: .... [link]www.google.de[/link] .......
vorkommt. Jetzt möchte ich den Text zwischen "[link]" und "[/link]" auslesen, in diesem Falle also "www.google.de". Wie mache ich das? Das müsste ja mit der Funktion preg_match() gehen, irgendwie bekomme ich es aber nicht hin, könnt Ihr mir bitte helfen.
Vielen Dank im Voraus.

MfG hab1cht

PS: mein preg_match sah so aus:
PHP:
$link = preg_match("/^([link])?([^\/link])/b", $text, $link);
Wenn ich dann $link ausgebe kommt "1".
 
Probier mal folgenden Perl-kompatiblen regulären Ausdruck:
Code:
<\[link\](.+?)\[/link\]>
 
So ich habe jetzt : /^([link])?([^\/link])/b durch deinen Code ausgetauscht, allerdings wird immer noch "1" ausgegeben, das heist er findet es, gibt aber nicht den Text dazwischen aus oder?
 
Lies doch nochmal im Manual nach:
Code:
int preg_match ( string Suchmuster, string Zeichenkette [, array &Treffer [, int Flags [, int Versatz]]] )

Es wird ein int zurückgegeben. Das Array mit den Treffern wird damit bei dir überschrieben. Du musst also einfach schreiben:
PHP:
preg_match("/^([link])?([^\/link])/b", $text, $link);
 
So jetzt hab ichs:
PHP:
$findelink = preg_match("<\[link\](.+?)\[/link\]>", $eintrag, $link);
echo $link[1][0];

Kann man das auch noch irgendwie anderst ausgeben, anstatt so verschachtelt mit den ganzen Arrays?

MfG hab1cht
 
Die Übereinstimmungen werden nun mal in solch einem Format gespeichert.
Was genau möchtest du denn realisieren? Vielleicht gibt es einen effizienteren Weg als den von dir gewählten.
 
> echo $link[1][0];

Glaube kaum, dass dies hier bei preg_match() geht.
Hier würde nur der buchstabe w angezeigt werden.

Modifer isU würde ich auch hinzufügen:

PHP:
$eintrag = '
[link]www.cix88.de[/link]
[link]cix88.de[/link]
';

$findelink = preg_match_all("<\[link\](.+)\[/link\]>isU", $eintrag, $link); 

echo '<pre>', print_r($link,true),  '<pre>';
 
Also ich habe einen Text in dem zum Beispiel folgendes steht:
Code:
Hallo das hier ist ein Link: [link]www.gooogle.de[/link], und hier steht noch einer: [link]www.web.de[/link]
Ich möchte, dass dann :
Code:
Hallo das hier ist ein Link: <a href="www.gooogle.de">www.google.de</a>, und hier steht noch einer: <a href="www.web.de">www.web.de</a>
dasteht.
Die Adresse soll also kopiert werden und dann hinter href= und als Titel dastehen (unterstrichen).

Vielen Dank im Voraus!!

MfG hab1cht
 
Probier mal Folgendes:
PHP:
<?php

	function generateLinkElement( $url )
	{
		return '<a href="'.htmlspecialchars($url).'">'.htmlspecialchars($url).'</a>';
	}

	preg_replace('<\[link\](.+?)\[/link\]>e', 'generateLinkElement("\1")', $string);

?>
 
So ich habe das mal eingebaut:
PHP:
<?php
$eintrag = strip_tags($_POST['eintrag']);
$findelink = preg_match_all("<\[link\](.+?)\[/link\]>", $eintrag, $link);

function generateLinkElement( $url )
    {
        return '<a href="'.htmlspecialchars($url).'">'.htmlspecialchars($url).'</a>';
    }

$generateLink = generateLinkElement($link);

$eintrag = preg_replace('<\[link\](.+?)\[/link\]>e', 'generateLinkElement("\1")', $eintrag);


echo $eintrag;
?>
Dann kommt zwar die richtige Ausgabe (also [link] wurde erfolgreich ersetzt), allerdings auch diese Fehlermeldung:
Code:
Warning: htmlspecialchars() expects parameter 1 to be string, array given in C:\xampp\xampp\htdocs\check.php on line 7

Wie bekomme ich diese Fehlermeldung weg?

Vielen Dank schonmal Gumbo, hast mir echt geholfen.

MfG hab1cht
 
Zurück