2

preg_match_allを使用して、Twitter検索応答でハッシュタグ値を検索しています。

検索結果にハッシュ値が含まれていない場合を除いて、期待どおりに機能します。何らかの理由で、$ tags配列にはまだ値があり、その理由はわかりません。

正規表現が正しくないためですか、それともpreg_match_allに問題がありますか?

ありがとう

$tweet = "Microsoft Pivot got Runner-Up for Network Tech from The Wall Street Journal in 2010 Technology Innovation Awards  http://bit.ly/9pCbTh";

private function getHashTags($tweet){
    $tags = array();
    preg_match_all("/(#\w+)/", $tweet, $tags);

    return $tags;

}

結果:

Array ( [0] => Array ( ) [1] => Array ( ) )

推測される結果:

Array();
4

2 に答える 2

4

デフォルトモードでpreg_match_allは、一致と部分一致の配列を返します。

PREG_PATTERN_ORDERは、完全なパターン一致の配列、最初の括弧で囲まれたサブパターンと一致する文字列の配列などに
なるように結果を順序付けます。$matches[0]$matches[1]

したがって、この場合、最初の配列はパターン全体の一致の配列であり、2番目の配列は最初のサブパターンの一致の配列です。また、一致するものが見つからなかったため、両方の配列が空になっています。

他の順序が必要な場合は、配列内の各一致とその部分一致を、 flagsパラメーターで使用PREG_SET_ORDERします。

preg_match_all("/(#\w+)/", $tweet, $tags, PREG_SET_ORDER);
于 2010-09-28T19:42:27.473 に答える
1

式と部分式を照合しているため、2つの空の配列が取得されます。期待される結果は、実際にはここでのエラーです。マニュアル、特に4番目の引数にフラグが渡されない場合のデフォルトの動作の説明を確認してください。

$ matches [0]が完全なパターン一致の配列であり、$ matches 1が最初の括弧で囲まれたサブパターンと一致する文字列の配列であるように、結果を順序付けます。

PREG_OFFSET_CAPTUREフラグ引数として渡さない限り、常にpreg_match_allから多次元配列を取得します。この場合、実際には、何にも一致しない式の空の配列を取得する必要があります。

于 2010-09-28T19:40:47.867 に答える