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


Preg Match for strings inside square brackets and @strings

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

如果你看看这个解释:http://regex101.com/r/fH4lG4你会发现为什么你的正则表达式是坏的。

除了文字B,你匹配了所有内容。

你应该做的是[^@]+, [^@ ]+'S+

我希望这对你有帮助。

这是一个简单的正则表达式

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

自己试试:http://www.regex101.com/r/iH8iJ5