2

我想得到里面的字符串[square] [brackets]和那些@like @this。以下适用于[tags]但不适用于@users.

$query = "[tag1] [tag2] @user1 @user2 ignoreme";

// check for tags e.g. [tag1] [tag2]
preg_match_all("/\[([^\]]+)\]/", $query, $tags);

// check for users e.g. @username
preg_match_all("/\B@[^\B]+/", $query, $users);

print_r($tags);
print_r($users);

输出:

(
    [0] => Array
        (
            [0] => [tag1]
            [1] => [tag2]
        )
        [1] => Array
        (
            [0] => tag1
            [1] => tag2
        )
    )
Array
(
    [0] => Array
        (
            [0] => @user1 @user2 ignoreme
        )
    )

该标签preg_match正在工作,但@user 只是抓住了它之后的所有东西(甚至忽略了第二个@user2)。

4

2 回答 2

3

如果您查看以下说明:http ://regex101.com/r/fH4lG4 ,您会发现您的正则表达式被破坏的原因。

您正在匹配除文字之外的所有内容B

你应该做的是要么[^@]+[^@ ]+要么\S+

我希望这有帮助 :)

于 2013-01-03T21:20:57.330 回答
0

这是一个简单的正则表达式中的解决方案

/((?<=\[)\w*(?=\])|(?<=@)\w*)/

在这里自己尝试一下:http ://www.regex101.com/r/iH8iJ5

于 2013-01-04T08:56:02.267 回答