2014-02-26 79 views
11

我要替換字符串用相同的哈希標籤哈希標籤,但添加鏈接到它後更換正則表達式使用PHP與正則表達式

例子:

$text = "any word here related to #English must #be replaced." 

我想

來代替每個主題標籤
#English ---> <a href="bla bla">#English</a> 
#be ---> <a href="bla bla">#be</a> 

所以outpu應該是這樣的:

$text = "any word here related to <a href="bla bla">#English</a> must <a href="bla bla">#be</a> replaced." 

感謝

+0

看一看preg_replace函數的PHP文檔,以及如何使用反向引用的工作:http://be2.php.net/preg_replace – jan

+0

@jan你需要比這更多,如果你想防止XSS :) –

+0

@Jack,問題是關於用正則表達式替換字符串。我沒有按照你的參考xss – jan

回答

18
$input_lines="any word here related to #English must #be replaced."; 
preg_replace("/(#\w+)/", "<a href='bla bla'>$1</a>", $input_lines); 

DEMO

輸出

any word here related to <a href='bla bla'>#English</a> must <a href='bla bla'>#be</a> replaced. 
5

這應該輕移你在正確的方向:

echo preg_replace_callback('/#(\w+)/', function($match) { 
    return sprintf('<a href="https://www.google.com?q=%s">%s</a>', 
     urlencode($match[1]), 
     htmlspecialchars($match[0]) 
    ); 
}, htmlspecialchars($text)); 

參見:preg_replace_callback()

+0

你在這裏提到的var $ map是動態的,它可以是任何hashtage,如#ask,#Answer,.... – user1272589

+0

@ user1272589所以'bla bla'鏈接總是一樣的嗎? –

+0

其實它不會像#英語鏈接將是www.google.com?q=English .......類似的東西 – user1272589