PHP の を使用して、特定の単語のすべてのインデックスを文字列から抽出しようとしていますpreg_match
。たとえば、hello
次の単語を考えてみましょう。
$r = "/\b(hello)\b/u";
この文字列でそれを探したいとしましょう:
$s = 'hello. how are you, hello there. helloorona!';
パラメータを指定して実行preg_match
し、PREG_OFFSET_CAPTURE
$matches という配列を渡すと、
preg_match($r, $s, $matches, PREG_OFFSET_CAPTURE);
次のようなものが返されることを期待しています (つまり、最後の "hellooroona" フレーズを無視します)。
["hello", 0], ["hello", 20]
しかし実際には、すべての一致を$matches
介してjson_encode
、またはループすることによって値をエコーして返すと、返される値は常に次のようになります。
["hello", 0], ["hello", 0]
これを同様の文字列で実行すると、たとえば
$s = 'how are you, hello there.';
答えは
["hello", 13]
どちらが正しい。実行するとhello hello hello
、3 つのインデックスがすべて 0 になります。
概要
したがって、インデックス カウンターは常に最初のインデックスを返すだけのようです。これは予想される動作ですか?実際のインデックスを取得するにはどうすればよいですか?