2015-04-21 72 views
-1

我正在使用PHP,並希望從文本末尾刪除所有#標籤(在這種情況下爲:#stack#overflow)並將它們放入數組中。 下面是一個例子文本:從PHP中的文本中查找和刪除#標籤

Lorem存有,http://example.com/#hello consetetur直徑#nonumy SED 直徑voluptua。 #stack #overflow

這是輸出我想:(末尾沒有主題標籤)

Lorem存有,http://example.com/#hello consetetur直徑#nonumy SED 直徑voluptua。

如何做到這一點?

+0

我想什麼你輸出str_replace函數want.Use功能 –

回答

0

要捕獲所有的井號標籤在陣列中,並從該字符串刪除它,你可以做這樣的事情:

$string = 'Lorem ipsum, http://example.com/#hello consetetur diam #nonumy sed diam voluptua. #stack #overflow'; 

// match all hashtags and keep them in a named capture group, to easily get the key later. 
preg_match_all('/(?P<hashtags>\#\w+)/', $string, $matches); 
$string = str_replace($matches['hashtags'], '', $string); 

var_dump($matches['hashtag']); 
Array 
(
    [0] => #hello 
    [1] => #nonumy 
    [2] => #stack 
    [3] => #overflow 
) 

var_dump($string); 
// 'Lorem ipsum, http://example.com/ consetetur diam sed diam voluptua. ' (length=70) 

如果你喜歡這種方式,現在你只需要弄清楚如何修剪超出的空格。

----- ----- EDIT2

如果你想捕捉只有最後一個主題標籤必須在正則表達式改爲'/(?P<hashtag>\#\w+$)/'。我們建議您使用explanation of the pattern

----- ----- EDIT3

這種新的問題是不同的,並且打開所需要的邏輯的不同視圖。

//keeping the same $string as above, you can easily get the substring after a dot (for example) til the end of the string with: 
$endOfString = substr($string, strrpos($string, '.') + 1); 

// now you can use a regexp, or the 'explode()' function 
preg_match_all('/(?P<hashtags>\#\w+)(?:\s)?/', $endOfString, $matches); 
$string = str_replace($matches['hashtags'], '', $string); 

var_dump($matches['hashtags']); 
var_dump(trim($string)); 

與往常一樣,你應該玩一下就可以得到的東西對你的所有不同的情況

+0

在的結束時只得到#標籤文本,而不是URL中或文本中的文本。怎麼做? – Tom

+0

感謝您的幫助。是否有可能獲得文本末尾的所有標籤?目前只有'#overflow'標籤被發現。 (我不知道這是否有幫助,但也許可以檢查以下字符以查找文本的結尾?:'。,:;!?') – Tom

相關問題