为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式匹配@和空格之间的字符

正则表达式匹配@和空格之间的字符

明月笑刀无情 2019-02-20 05:01:06
举个例子:AAA@XXX YYYY匹配到@和空格之间的字符XXX,请问正则怎么来写?
查看完整描述

6 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

if(preg_match_all(
    '%@(\w+)%u', 
    '@张全蛋 含泪质检@三星Note7 被炸飞,听说@炸机 跟@啤酒 更配哦!', 
    $arr
)) {
    var_export($arr);
}
//输出
array (
  0 => 
  array (
    0 => '@张全蛋',
    1 => '@三星Note7',
    2 => '@炸机',
    3 => '@啤酒',
  ),
  1 => 
  array (
    0 => '张全蛋',
    1 => '三星Note7',
    2 => '炸机',
    3 => '啤酒',
  ),
)

正则表达式 %@(\w+)%u 中:
%是分隔符.
u是修饰符,表示unicode.
\w是元字符,在ASCII下等价于[A-Za-z0-9_],在unicode下表示字符(包括中文)和数字和下划线.
+是量词,表示1个或多个,等价于{1,}的写法.
()表示子模式,体现在匹配结果中的$arr[1]里.
区别于主模式,体现在匹配结果中的$arr[0]里.

另外,也可以试试下面这个正则表达式:

%@(\S+)\s%
其中:
\s   匹配空白字符,包括:空格,制表符(\t,\v),回车(\r),换行(\n),换页(\f),等价于[ \t\r\n\v\f]
\S   匹配除空白字符外的任意字符,等价于[^ \t\r\n\v\f]

另外:

preg_match:     返回模式的匹配次数,0次(不匹配)或1次,因为preg_match在第1次匹配后会停止搜索.
preg_match_all: 返回完整匹配次数,如果发生错误返回FALSE.

也就是说,如果上面的例子使用preg_match,那只能匹配到字符串中的"张全蛋".

查看完整回答
反对 回复 2019-03-01
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

@(.+)\s

查看完整回答
反对 回复 2019-03-01
  • 6 回答
  • 0 关注
  • 3460 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信