我想在[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)。
答案 0 :(得分:3)
如果你看一下这个解释:http://regex101.com/r/fH4lG4你会发现你的正则表达式被打破的原因。
你匹配所有文字B
。
您应该做的是[^@]+
,[^@ ]+
或\S+
我希望这会有所帮助:)
答案 1 :(得分:0)