2015-11-19 24 views
1

我有一個這樣的字符串:str_replace函數用於多個項目,然後將結果存儲在新的變量

$content = 'Hi @steve, have you seen what @dave wrote?'; 

我基本上是想找到只直接的話以下@符號(如Twitter提到),然後遍歷每個結果都與他們一起執行任務。

我知道如何剝離從整個字符串中的@字符:

$strip_at = str_replace('@', '', $content); 

這將導致$ strip_at之中:

Hi steve, have you seen what dave wrote? 

但我怎麼會用str_replace函數來定位每個「提「,刪除@符號只是離開單詞(在這種情況下的名稱),然後將每個」提及「的結果存儲在一個數組中的新變量?

期望的結果:

$mentions = array('steve','dave'); 

所以,我可以再遍歷$提到,做東西的結果,如:

foreach ($mentions as $mention) { 
    echo 'This persons name is '.$mention.'<br />'; 
} 

回答

2

您可以用正則表達式來實現這一點:

preg_match_all('/(?<[email protected])(\w){1,15}/', $content, $results); 

它將這個數組存儲在變量$results

[ 
    [ 
     "steve", 
     "dave", 
    ], 
    ] 

,你可以通過遍歷枚舉$results[0]比賽:

foreach($results[0] as $name) { 
    echo $name . '<br>'; 
} 

打印:

steve 
dave 

如果您想了解什麼/(?<[email protected])(\w){1,15}/意味着:

(?<[email protected]) - 「lookbehind」 - 這意味着我們需要@先於我們正處在匹配

(\w){1,15}真正感興趣的是指匹配的最大長度15字(嘰嘰喳喳名的最大尺寸)

所以我們用起來會等額@符號後面的twitter用戶名。

+0

那麼$結果將是我然後循環的變量? $ results as $ result – Grant

+0

@Grant你可以遍歷'$ results [1]'like:'foreach($ results [1] as $ name)echo $ name;' – Macmee

+0

好吧,聽起來很完美!有沒有辦法處理原始的史蒂夫,戴夫對象(@符號),因爲他們將永遠不需要?所以基本上我可以使用$ results [0]而不是$ results [1] – Grant

相關問題