2013-07-10 19 views
0

我想將字符串的子串以#123的形式轉換爲<a href='show.php?id=123'>#123</a>。 所以讓他們鏈接。因此字符串"take a look at #42"轉換爲"take a look at <a href='show.php?id=42'>#42</a>"如何找到一個字符串模式並在PHP中修改它?

php是否有內置函數?

感謝

+1

這基本上回答所以我就張貼作爲評論:http://3v4l.org/Y65uW – Passerby

+0

是這個工程。謝謝大家 ! – jeff

回答

1
$pattern = '/([^#]+)(#[\d]+)([^#]+)/'; 
$str = 'Take a look at #42'; 
if (preg_match($pattern, $str, $matches)){ 
    echo $matches[1]."<a href='show.php?id=".substr($matches[2], 1)."'>". $matches[2].'</a>'.$matches[3]; 
} 

此輸出:

Take a look at <a href="show.php?id=42">#42</a> 
+0

謝謝,但這與模式不符。我應該將[a-z]更改爲[0-9]嗎? – jeff

+0

,當我將其更改爲0-9時,它找到了模式,但刪除了其他部分。所以「看看#42」變成了「42」 – jeff

+0

我正在更新 –

1
<?php 

$string="take a look at #42"; 
if (preg_match('/#[0-9]+/', $string, $matches)){ 
echo "<a href='show.php?id=".substr($matches[0], 1)."'>". substr($matches[0], 1).'</a>'; 

} 

?> 
1

使用preg_replace_callback()進行更換:

echo preg_replace_callback('/#(\w+)/', function($match) { 
    return sprintf('<a href="show.php?id=%s">%s</a>', 
     $match[1], 
     '#' . $match[1] 
    ); 
}, 'take a look at #42'); 
// look at <a href="show.php?id=42">#42</a> 

雖然不是嚴格此處需要,確保你逃避你HTML公關operly否則:)

參見:urlencode()htmlspecialchars()

相關問題