php - Preg 匹配方括号和 @strings 内的字符串

标签 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)。

最佳答案

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

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

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

我希望这有帮助:)

关于php - Preg 匹配方括号和 @strings 内的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14147399/

相关文章:

javascript - 如何使此youtube videoId解析RegExp在JS中工作?

php - fatal error : Maximum execution time of 30 seconds exceeded

php - 在 WooCommerce 中使字段可选 我的帐户编辑地址

regex - 在进一步匹配之前使用正则表达式收集组

php - preg_match 给出的公式和字符?

PHP从第一个数字(整数) explode

php - 如何在 PHP/MySQL 中替换重复项?

php - 通过 PHP 更新 MySQL 数据时出错

php - 将地址分解为数组

javascript - 在 JavaScript 中屏蔽最后 4 位数字