-3

# で始まる単語に一致する正規表現が必要です。

この質問How to match a pound (#) symbol in a regex in php (for hashtags)を書きましたが、単語の先頭に # が必要であることを説明するのを忘れていました。

#word#123#12_sdasに一致する必要がありますが、 1#234または#1234には一致しません。

たとえば、 では"#match1 notMatch not#Match #match2 notMatch #match3"#match1#match2、および#match3 のみが表示されます。

編集: 1 ポンド (#) の後に 1 つ以上の [a-ZA-Z0-9_] が必要です。試合前に [a-ZA-Z0-9_] を含むことはできません。

私の問題は、単語の先頭にあるポンドを見つけることでした。

4

3 に答える 3

4
preg_match_all('/(?:^|\s)(#\w+)/', $string, $results);

編集: これをテストするための php cli はありませんが、正規表現は少なくとも Python で動作します。

于 2012-02-23T22:53:52.560 に答える
1

これを試して:

preg_match_all('/(?:^|\s+)(#\w+)/', $your_input, $your_results);
// print results
print_r($your_results);

#記号で始まるすべての単語に一致します。単語はすべての有効な空白文字で区切ることができます (つまり、 の 1 つ\t\r\n\v\f)

//input
#match1 notMatch not#Match #match2 notMatch #match3
//output
Array
(
    [0] => Array
        (
            [0] => #match1
            [1] =>  #match2
            [2] =>  #match3
        )

    [1] => Array
        (
            [0] => #match1
            [1] => #match2
            [2] => #match3
        )

)
于 2012-02-23T22:54:37.577 に答える
0

PHP構文についてはわかりませんが、正規表現は次のようになり、単語の境界と最初の文字の大文字と小文字を区別しないチェックを使用する必要があります

/\b#[a-z]\w+\b/i

于 2012-02-23T23:49:14.523 に答える