2010-10-28 70 views
4

我想搜索我的twitter狀態對象的文本屬性,並將,的@username換出。我到目前爲止所嘗試的看起來是這樣的:如何使用PHP preg_replace鏈接Twitter用戶名?

$pattern = '/([@]{1})([a-zA-Z0-9\_]+)/'; 
$replace = '<a href="http://twitter.com/\2">\1\2</a>'; 
$new_string = preg_replace($pattern, $replace, $text); 

但它沒有做任何替換。我知道我的reg exp是錯誤的,但我無法弄清楚究竟在哪裏/爲什麼。幫幫我?

**編輯:...請求的樣本數據?

$text = '@janesmith I like that, but my friend @johndoe said it better.'; 

所需的輸出:

@janesmith我喜歡這樣,但我的朋友說:@johndoe更好。

***** MY FULL FUNCTION *****

function linkify($string, $twitter=false) { 

    // reg exp pattern 
    $pattern = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; 

    // convert string URLs to active links 
    $new_string = preg_replace($pattern, "<a href=\"\\0\">\\0</a>", $string); 

    if ($twitter) { 
     $pattern = '/@([a-zA-Z0-9_]+)/'; 
     $replace = '<a href="http://twitter.com/\1">@\1</a>'; 
     $new_string = preg_replace($pattern, $replace, $new_string); 
    } 

    return $new_string; 
} 
+1

你能提供一個輸入樣本和所需的輸出嗎? – LarsH 2010-10-28 14:53:23

+0

你可以把一些樣本數據進行測試嗎? – Keng 2010-10-28 14:53:31

+0

當你說「它不做任何替換」時,你的意思是它刪除了用戶名,但沒有鏈接,或者你的意思是它沒有修改輸入字符串? – LarsH 2010-10-28 15:03:28

回答

5

爲什麼\_過嗎?如果你拿出\,它會起作用嗎?雖然這不應該破壞功能...

它可能會有所幫助,將\1更改爲\\1,以確保反斜槓被轉義;或更好(自PHP 4.0.4以來)$1。但同樣,它應該在單引號內按原樣工作。

此外,您還可以簡化:

$pattern = '/@([a-zA-Z0-9_]+)/'; 
$replace = '<a href="http://twitter.com/$1">@$1</a>'; 
+0

好點 - 我在@時增加了額外的業務,當它不工作時,這是問題所在。我只是按照你的建議進行了簡化,並在'_'之前刪除了'\',但它仍然不能替代。 – rhodesjason 2010-10-28 15:02:12

+0

@Jason,如果你使用'$ 1'而不是'\ 1',會發生什麼? – LarsH 2010-10-28 15:12:59

+0

@Jason,我在http://www.regular-expressions.info/javascriptexample.html嘗試了上面的內容,它工作正常。所以我有點不知道還有什麼可能是錯的。 – LarsH 2010-10-28 15:19:30

2

我有更新一個小功能,支持井號標籤太:

功能linkify($字符串,$嘰嘰喳喳= FALSE){

// reg exp pattern

$ pattern =「/(http|https|ftp|ftps)\:\///[a-zA-Z0-9-.]+.[a-zA-Z] {2,3}(\/\ S *)/?「;

//將字符串URL轉換爲活動鏈接 $ new_string = preg_replace($ pattern,「\ 0」,$ string);

如果($嘰嘰喳喳){

$pattern = '/\@([a-zA-Z0-9_]+)/'; 

    $replace = '<a href="http://twitter.com/\1">@\1</a>'; 

    $new_string = preg_replace($pattern, $replace, $new_string); 


    $pattern = '/\#([a-zA-Z0-9_]+)/'; 

    $replace = '<a href="http://twitter.com/search/#\1">#\1</a>'; 

    $new_string = preg_replace($pattern, $replace, $new_string); 

}

回報$ new_string; }

0

Twitter已經更新了他們的API和,至少對我來說,這是方式更加人性化。查看dev.twitter.com/docs/twitter-for-websites click here上的文檔。您必須先創建一個應用程序,按照分步說明操作,然後創建一個小部件。您在下面看到的小部件會顯示我的推文,但您可以創建一個顯示時間軸上的所有操作或搜索,列表等的結果的小部件。

 <a class="twitter-timeline" ref="https://twitter.com/SKAmerica" data-widget-id="359949405157203970">Tweets by @SKAmerica</a> 
    <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id))js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>