@功能求教

现在我需要实现在帖子或回复中@某用户,然后想办法入库之前提取出@的用户名
比如:@老虎会游泳@姜辰 、@酱油 @封尘 。

如上,我要提取出老虎会游泳、姜辰、酱油、封尘等用户名,要如何提取?
回复列表(14|隐藏机器人聊天)
  • @Ta / 2015-06-29 / /
    用正则表达式的匹配替换
  • @Ta / 2015-06-29 / /
    @18873870239,如何替换?我这是打算入库之前发信息。。,,
  • @Ta / 2015-06-29 / /
    他的意思是, @ 后提取出 @ 的用户名,并将后面的信息和当前帖子的链接,发到对应用户的信箱里,也就是存入对应数据表
  • @Ta / 2015-06-29 / /
    @,之间改为链接不就行了
  • @Ta / 2015-06-29 / /
    @飞炫的火花,这是以前我写的,你可以参考一下.

    <?php
    function lstmsg($txt,$send='有人提到你')
    {
    	if(preg_match_all("!(@|@)([\\x{4e00}-\\x{9fa5}A-Za-z0-9_\\-]{1,})(\x20|&nbsp;|<|\xC2\xA0|\r|\n|\x03|\t|,|\\?|\\!|:|;|,|。|?|!|:|;|、|…|$)(.*?)!ue",$txt,$rs))
    	{
    
    		$s=preg_replace("!(@|@)([\\x{4e00}-\\x{9fa5}A-Za-z0-9_\\-]{1,})(\x20|&nbsp;|<|\xC2\xA0|\r|\n|\x03|\t|,|\\?|\\!|:|;|,|。|?|!|:|;|、|…|$)!ue","'@\\2 \\3'",$txt);
    		
    			/* 为了捕捉小片段
    			如果输入的是 @100。。。。,那么将会变成 @100 。。。。,方便使用strpos函数获取字符所在位置
    
    			*/
    	    $ary=array();
    
    		foreach($rs[2] as $v)
    		{
    			$n=strpos($s,'@'.$v.' ');//得到所在位置
    
    			$msgtxt=mb_substr($s,$n,15,'utf-8').'......';//截取片段
    
    			if(ctype_digit($v)){//如果是纯数字,则认为是uid
    
    			$ary[$v]=$msgtxt;
    
    			continue;
    
    			}else{//不是纯数字,
    			$ary[$this->getuid($v)]=$msgtxt;
    			}
    		}
    		
    		foreach ($ary as $key=>$val)
    		{//遍历数组,覆盖重复键名(键名就是uid)
    			$arr[$key]=$val;
    		}
    		  
    		foreach ($arr as $key=>$val)
    		{//发送提醒信息
    
    			if($this->isdata($key))
    			{//uid是否存在
    
    				$this->lstmsg_add($key,$send.'[br]'.$val); 
    			}
    		}
    	  
    	  
    	}
    }
    ?>

  • @Ta / 2015-06-29 / /
    @胜永,谢谢,需要的就是这个,从帖子中提取@。。。。
  • @Ta / 2015-06-29 / /
    @飞炫的火花,不客气
  • @Ta / 2015-06-29 / /
    @无影线,正解。。。
  • @Ta / 2015-06-29 / /
    @飞炫的火花,可惜我完全不会…
  • @Ta / 2015-06-29 / /
    @无影线,我也不会,正在琢磨。。。
  • @Ta / 2015-06-29 / /
    @飞炫的火花,哎…我就一直不明白要那么多匹配干吗…脑袋晕啊
  • @Ta / 2015-06-29 / /
    @无影线,匹配很重要的,虽然我也不懂正则。。。。
  • @Ta / 2015-06-29 / /
    @飞炫的火花,我看了看胜永的…他写的也和老虎不一样,判断id,就是看是不是数字,感觉麻烦了
  • @Ta / 2015-06-29 / /
    @无影线,他的应该是根据id检测是否有这个用户,有就发信件没有就不用打信件。。。。
添加新回复
回复需要登录