已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > PHP > 讨论/求助

标题: @功能求教

作者: @Ta

时间: 2015-06-29

点击: 5429

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

如上,我要提取出老虎会游泳、姜辰、酱油、封尘等用户名,要如何提取?

[隐藏样式|查看源码]


『回复列表(14|隐藏机器人聊天)』

1. 用正则表达式的匹配替换
(/@Ta/2015-06-29 12:37//)

2. @18873870239,如何替换?我这是打算入库之前发信息。。,,
(/@Ta/2015-06-29 12:41//)

3. 他的意思是, @ 后提取出 @ 的用户名,并将后面的信息和当前帖子的链接,发到对应用户的信箱里,也就是存入对应数据表
(/@Ta/2015-06-29 13:54//)

4. 把@,之间改为链接不就行了
(/@Ta/2015-06-29 14:02//)

5. @飞炫的火花,这是以前我写的,你可以参考一下.

<?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 14:11//)

6. @胜永,谢谢,需要的就是这个,从帖子中提取@。。。。
(/@Ta/2015-06-29 14:14//)

7. @飞炫的火花,不客气
(/@Ta/2015-06-29 14:15//)

8. @无影线,正解。。。
(/@Ta/2015-06-29 14:17//)

9. @飞炫的火花,可惜我完全不会…
(/@Ta/2015-06-29 14:54//)

10. @无影线,我也不会,正在琢磨。。。
(/@Ta/2015-06-29 15:09//)

11. @飞炫的火花,哎…我就一直不明白要那么多匹配干吗…脑袋晕啊
(/@Ta/2015-06-29 15:18//)

12. @无影线,匹配很重要的,虽然我也不懂正则。。。。
(/@Ta/2015-06-29 15:25//)

13. @飞炫的火花,我看了看胜永的…他写的也和老虎不一样,判断id,就是看是不是数字,感觉麻烦了
(/@Ta/2015-06-29 15:32//)

14. @无影线,他的应该是根据id检测是否有这个用户,有就发信件没有就不用打信件。。。。
(/@Ta/2015-06-29 16:08//)

回复需要登录

7月13日 11:50 星期天

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1