2012-08-16 46 views
0

我有一個變量是這樣的:定期用一定數目的字符的preg_replace表達

text1 http://www.server.com/10characters text2 http://www.server.com/10characters text3 

我想的preg_replace所有「http://www.server.com/10characters」鏈接「點擊」,但‘http://www.server.com/’是必須發生的和恆定的‘10characters’始終是任何10個字符(沒有少,沒有更多)

對於離。 更換

text1 http://www.server.com/d19d2aj53f text2 http://www.server.com/a49ds5j3ax text3 
http://www.otherserver.com/a49ds5j3ax text3 

text1 <a href="http://www.server.com/d19d2aj53f">Click</a> text2 
<a href="http://www.server.com/a49ds5j3ax">Click</a> 
text3 http://www.otherserver.com/xt92s5sfa2 text3 

我不知道如何做到這一點:/我試了幾種方法,但沒有很好的效果。

回答

0

如果域名後10個字符總是,你並不需要的preg_replace:

$url1 = substr($url,0,35); //length of http://www.server.com/10characters is 35 chars 
echo "text1 <a href=\"$url1\">click</a><br>"; 
/// etc 
+0

但它必須找到並替換所有http:/www.server.com/10characters鏈接,而不是一個。在文本中,您甚至可以擁有3個或更多的文本。 – user1604488 2012-08-16 23:05:14

+0

@ user1604488你可以在一個循環中運行它;) – alfasin 2012-08-16 23:18:28

0

我覺得

preg_replace("http://www\.server\.com/[0-9a-zA-Z]{10}", " Click!", $myLink) 

應該工作。

+0

不要忘了[分隔符](http://php.net/manual/en/regexp.reference.delimiters.php)和逃避你的'.'s。另外,這些例子似乎表明這十個字符不限於數字。 – Wiseguy 2012-08-16 22:28:38

+0

我可以解釋它壞的,但我希望它換成是這樣的: Click! user1604488 2012-08-16 22:30:00

+0

如果您已經知道答案,爲什麼問這個問題? – Hidde 2012-08-17 07:09:07

0
$str = 'text1 http://www.server.com/d19d2aj53f text2 http://www.server.com/a49ds5j3ax text3 http://www.otherserver.com/a49ds5j3ax text3'; 

echo preg_replace('~http://www\.server\.com/.{10}~i', '<a href="$0">click</a>', $str); 

在模式,.是 「任意字符」,所以.{10}指任何十個字符。

在更換,$0代表什麼被整個模式(在這種情況下,完整的URL)匹配。這個是a working example這個

相關問題