检测在php中用逗号加入的提及

时间:2013-10-18 11:28:57

标签: php regex

我有一个这样的字符串:

*"Hola @user1,@user2. ¿Que tal ayer con@user3 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);
    }

2 个答案:

答案 0 :(得分:0)

你可以使用REGEX,像"@([a-zA-Z09]+)"这样的东西应该可以。如果您的用户不存在,稍后只需将matcher.group()替换为matcher.group(1)即可。第一个包含整个捕获的字符串@,第二个只包含第一个组(例如,用户名不包含@

答案 1 :(得分:0)

检查出来:

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

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

var_dump($matches[0]);