Regexp-strul

PHP

2 svar · 271 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

251 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)