2

文字列を中に入れたいと思って[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 はそれ以降のすべてを取得します (2 番目の @user2 を無視しても)。

4

2 に答える 2

3

この説明を見ると、http: //regex101.com/r/fH4lG4正規表現が壊れている理由がわかります。

あなたはすべてを一致させていますが、リテラルBです。

あなたがすべきことは[^@]+[^@ ]+または\S+

これが役立つことを願っています:)

于 2013-01-03T21:20:57.330 に答える
0

これが1つの単純な正規表現の解決策です

/((?<=\[)\w*(?=\])|(?<=@)\w*)/

ここで自分で試してみてください:http://www.regex101.com/r/iH8iJ5

于 2013-01-04T08:56:02.267 に答える