Preg匹配方括号和@strings中的字符串

时间:2013-01-03 21:17:52

标签: php regex preg-match

我想在[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)。

2 个答案:

答案 0 :(得分:3)

如果你看一下这个解释:http://regex101.com/r/fH4lG4你会发现你的正则表达式被打破的原因。

你匹配所有文字B

您应该做的是[^@]+[^@ ]+\S+

我希望这会有所帮助:)

答案 1 :(得分:0)

这是一个简单的Regex

中的解决方案
/((?<=\[)\w*(?=\])|(?<=@)\w*)/

请在此处自行尝试:http://www.regex101.com/r/iH8iJ5