Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe zu einem Regex
Beatkiller
26-06-2005, 19:39
Hallo,
ich habe einen Regulären Ausdruck, den ich etwas abändern will. Gefunden hab ich ihn auf php-faq.de:
function
replace_uri( $str )
{
$pattern = '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
return preg_replace($pattern,"\\1<a href=\"\\2\\3\"><u>\\2\\3</u></a>\\4",$str);
}
Dieser sollte nun aber, falls ein Link länger als 20 Zeichen ist, die Link-Beschreibung auf 20 Zeichen setzen. Der Link selbst sollte natürlich auf die richtige Adresse zeigen. Ich bin mir ziemlich sicher, dass es einen Regex dafür geben muss, denn in verschiedenen Foren wird das so gemacht.
Kann mir jemand weiter helfen?
undefined
26-06-2005, 23:04
Ich habe es nicht getestet aber müßte stimmen ;)
$text = "Test Text <a href=\"http://www.mrunix.de\"><u>mit einer überlangen Link Beschreibung</u></a> kürzen. ";
$o = preg_replace( "/(<a\s+href=\".*\">\s*<u>)(\b.{1,10})(?:.*)(<\/u>\s*<\/a>)/s", "$1($2)$3", $text );
echo htmlentities( $o, ENT_QUOTES, 'utf-8' );
Beatkiller
27-06-2005, 10:24
Hmm, das scheint es nicht zu sein, was ich suche. Die Funktion replace_uri ersetzt Text-Links in anklickbare Links. Wenn der Link aber zu lang ist, ist somit auch die Seite zu breit und man muss Scrollen.
Danke aber trotzdem für die Hilfe.
undefined
27-06-2005, 10:29
Das ist ein Beispiel, und sehr wohl die Funktion die du suchst, du mußt sie nur richtig einbinden ;)
PS: Dies hier ist ein Support Forum und kein Download Forum, wir zeigen dir den Weg, der Rest - und was du daraus machst - ist deine Sache ;)
Beatkiller
27-06-2005, 10:41
Sorry, ich wollte nicht respektlos erscheinen. Ich stand nur auf dem Schlauch und wusste mir nicht anders zu helfen, als hier zu posten.
Danke!
undefined
27-06-2005, 15:08
Schon ok, Was verstehst du denn an dem Code nicht?
wenn ich dich richtig verstanden habe, brauchst du soetwas:
<?
if (strlen($url) > 20) {
$url_kurz = substr($var,0,20)."...";
} else {
$url_kurz = $url;
}
?>
<a href="<% echo $url; %>"><% echo $url_kurz; %></a>
Beatkiller
30-06-2005, 15:39
@amc, dann müsste man davon ausgehen, das ich URLS einzeln habe, sie stehen aber mittem im Text.
@undefined
Ich habe nur deswegen geschrieben, das es das nicht zu sein scheint, weil ich erst nicht wusste, wie ich es anwenden soll.
Ich hab es jetzt mal so zusammen gebastelt:
// Taken from php-faq.de
// & thx to user undefined at munix.de forum
function
replace_uri( $str )
{
$pattern = '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
$text = preg_replace($pattern,"\\1<a href=\"\\2\\3\"><u>\\2\\3</u></a>\\4",$str);
$text = preg_replace("/(<a\s+href=\".*\">\s*<u>)(\b.{1,45})(?:.*)(<\/u>\s*<\/a>)/s", "$1($2...)$3",$text);
return($text);
}
Damit geht es ganz wunderbar. Vielen herzlichen Dank. Auch danke, das du mich etwas schmoren hast lassen (ernst gemeint). Ich sollte mir langsam mal ein (nicht zu trockenes) Buch über Regex kaufen. Addison-Wesley ist vermutlich der Mercedes aber für Anfänger nicht wirkich geeignet (wie immer). Irgendwelche Tipps diesbezüglich? Ich liebe hard-copies.
undefined
30-06-2005, 17:18
Wenn - dann am besten das Original von Jeffry E. F. Friedl mit der Übersetzung von Andreas Karrer.
Regex ist ohnehin schwere kost, egal mit welchen Buch man sich einliest.
Grund Vorrausetzung ist sich das Buch wirklich von A-Z durchzulesen, alles andere macht keinen Sinn sondt werden entscheidende Punkte verborgen bleiben. Unter Linux gibt es bei Kate im übrigen einen sehr guten Regexp Editor. ;)
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.