在@符号和逗号之间获取文本

时间:2011-07-31 09:43:42

标签: php regex

所以我正在做类似推特的列表,我希望会员能够互相推文。

我想要做的是编写一个正则表达式,它将提取@sign和逗号之间的所有数据。

例如,

 @foo, @bar, @foo bar, hello world

目前我有以下表达方式。

 /@([a-z0-9_]+)/i

然而,这将停留在空间,所以不是在成员上注册“@foo bar”而是在@foo上识别它并忽略条形部分。

有人可以帮我改变那个查询,以便允许用户名有空格。

5 个答案:

答案 0 :(得分:5)

~@([^,]+)~

[^,]表示除,

之外的所有字符

DEMO

答案 1 :(得分:1)

如果你真的想要在@符号和逗号之间匹配所有数据,你可以使用

/@(.+),/i

但我认为你需要的是......

/@([\w +]+),/i

...匹配所有单词字符(字母,数字和下划线!)以及@和逗号之间的空格。查看demo

答案 2 :(得分:0)

我认为这就是你所需要的:

/@([a-z0-9_\s]+)/i

\s是空间的符号。

答案 3 :(得分:0)

/@(.*?),/ ?使*非贪婪,这就是为什么它会在第一个逗号后停止。你应该明白它不会匹配 @foo没有逗号

答案 4 :(得分:-2)

尝试preg_match_all

<?php
$subject = "@foo, @bar, @foo bar, hello world";
$pattern = '/@(.*),.*/';
$matches = preg_match($pattern, $subject, PREG_SET_ORDER);
print_r($matches);
?>

<强> DEMO of REGEX PATTERN