webForumDet fria alternativet
Logga in / Bli medlem

Regexp-strul

PHP

2 svar · 255 visningar · startad av peterg

Medlem sedan aug. 200023 inlägg
Trådstart#1

Hej=)
Jag undrar om någon kan hjälpa mig med ett litet regexp problem.

Jag använder denna kod

$str = eregi_replace("(\[URL=)((http://|https://|ftp://|mailto:)(([[:alnum:]]|[[:punct:]])*))\](([[:alnum:]]|[[:punct:]])*)\[/URL\]","<a href=\"\\2\">\\6</a>",$str);

för att omvandla

[url=http://www.adress.se]Länk[/url]

till en vanlig länk, och det funkar kanonbra, men....
när man skriver in ett mellanslag i den text som ska länkas så funkar det inget bra, tex "Klicka här"

Hur ska jag förändra det reguljära uttrycket för att den ska tillåta mellanslag?

Jag har provat \s men inget positivt resultat:(

Medlem sedan juli 2000449 inlägg
#2

Detta fungerar för mig:


	function makeUrl($str) {
		// [a]xxxx://www.url.com[/a]
		$pattern[0] = "#\[a\]([a-z]+?://){1}(.*?)\[/a\]#si";
		$replacement[0] = '<a href="\1\2" target="_blank">\1\2</a>';
		
		// [a]www.url.com[/a]
		$pattern[1] = "#\[a\](.*?)\[/a\]#si";
		$replacement[1] = '<a href="http://\1" target="_blank">\1</A>';
		
		// [url=xxxx://www.url.com]Websajt[/url]
		$pattern[2] = "#\[a=([a-z]+?://){1}(.*?)\](.*?)\[/a\]#si";
		$replacement[2] = '<a href="\1\2" target="_blank">\3</A>';
		
		// [url=www.url.com]Websajt[/url]
		$pattern[3] = "#\[a=(.*?)\](.*?)\[/a\]#si";
		$replacement[3] = '<a href="http://\1" target="_blank">\2</a>';

		$str = preg_replace($pattern, $replacement, $str);

		return $str;
	}

$str = makeUrl($str);
Medlem sedan aug. 200023 inlägg
#3

Fixade det!

Jag la till [[:space:]] och då funkade det =)
..och ett $-tecken så att man kan skapa flera länkar.
Utan dollar-tecknet kunde man bara skapa en länk. 2st länkar gjorde att nästan hela text-stycket blev länkat

441 ms totalt · 4 externa anrop · v20260731065814-full.7d626504
306 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
306 ms — ändringar (db)