2013-10-18 28 views
1

加入我有一個這樣的字符串:檢測提到用逗號在PHP

*"Hola @user1,@user2. ¿Que tal ayer [email protected] en #el_parque?"* 

我想提取@mentions如果用戶存在分析。如果不存在,我將刪除@標籤。

我該如何解析字符串?

我對這個功能

if(!empty($Timeline)){ 
     $CI =&get_instance(); 

     $words = explode(" ", $Timeline); 
     $renderTimeline = ""; 

     $patternu = '@([a-zA-Z09]+)'; 
     $patternm = '/([#]{1})([a-zA-Z0-9\_]+)/'; 

     if(!isset($CI->usuarios_model)){$CI->load->model('usuarios_model');} 
     if(!isset($CI->juegos_model)){$CI->load->model('juegos_model');} 

     foreach($words as $word){ 
      if(preg_match($patternu,$word)){ //mencion 
       $word = preg_replace($patternu, '$0', $word); 
       echo $word; 
       $usuario = $CI->usuarios_model->get(null,preg_replace($patternu, '\2', $word)); 
       if(!$usuario){$word = substr($word,1);} 
      }elseif(preg_match($patternm,$word)){ //juego 
       $juego = $CI->juegos_model->existJuego(null,preg_replace($patternm, '\2', $word)); 
       if(!$juego){$word = substr($word,1);} 
      } 

      $renderTimeline.=" ".$word; 
     } 

     return trim($renderTimeline); 
    } 
+0

也爲CON @用戶3在你的病情,或僅@ USER1和@ user2? – Legionar

+0

好的,你做了嗎? – Antoniossss

回答

0

檢查了這一點:

$string = "Hola @userA,@userB. ¿Que tal ayer [email protected] en #el_parque?" ; 
$matches = array() ; 
$pattern = "/@[a-zA-Z0-9]+/" ; 

preg_match_all($pattern, $string, $matches); 

var_dump($matches[0]); 
+0

如果我喜歡在用戶名中加「_」(下劃線)。正則表達式是這樣的? '$ pattern =「/ @ [a-zA-Z0-9 _] + /」;' – 50l3r

+0

應該是:''/ @ [a-zA-Z0-9 _] + /'' – vikingmaster

0

您可以使用正則表達式這個發展,像"@([a-zA-Z09]+)"應該做的伎倆。稍後如果您的用戶不存在,只需將matcher.group()替換爲matcher.group(1)即可。第一個具有捕獲串整體與@和第二個只有第一組(eg.username不@

+0

我如何提取驗證的用戶名字符串? – 50l3r

+0

通過使用我提供的正則表達式字符串。檢查以下正則表達式教程:http://www.javascriptkit.com/javatutors/redev2.shtml在客戶端執行(無需發佈)或使用php驗證服務器端的用戶。你需要熟悉REGEX(如抽象,JS或PHP) – Antoniossss