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