5
回答
php正则匹配仿微博@问题
【腾讯云】学生服务器套餐10元/月 >>>   

我现在要解析内容中@username 的 uid 

function Atuids($content,$num=10) {//获取@用户
global $_SGLOBAL;
	preg_match_all("/@(.+?)([\s|:]|$)/is", $content, $matches);
	$unames = $matches[1];
	$ns = "'".implode("','", $unames)."'";
	$csql = "username IN($ns)";
	if($unames){
		$query = $_SGLOBAL['db']->query("SELECT uid,username FROM ".tname('member')." WHERE $csql LIMIT 0, $num");
		while ($uvalues = $_SGLOBAL['db']->fetch_array($query)) {
		  if(!empty($uvalues)){
			  $uids[] = $uvalues;
		  }
		}
	}
	return $uids;
}

上面是我自己写的方法  

实现如下 

	//解析@用户通知
    $atme = Atuids($message,8);//只解析8个
	if($atme){
		foreach($atme as $atuid){
          if($atuid['uid'] && $atuid['uid'] != $_SGLOBAL['supe_uid']){
			  $note = cplang('note_doing_at_user', array("space.php?uid=$_SGLOBAL[supe_uid]&do=weibo&id=$newdoid"));
			  notification_add($atuid['uid'], 'doing', $note);
		  }
	    }
	}
 

以上基本能满足需求,但是我现在想优化一下正则 只在@后面2到14个字符内进行匹配 代码我修改成了 preg_match_all("/@(.+?)([\s|:]{2,14}|$)/is", $content, $matches); 匹配不准了 存在中文乱码了 ,求怎么解决 发现新浪微博@用户空格 解析不准的情况 如 “@放大范德萨雷锋啊 在吗? ” 这样的 就会误伤
举报
不坏
发帖于6年前 5回/941阅
顶部