2011-12-07 11 views
2

- 更新 - これは、キーワードをチェックして絞り込みました。キーワードは、配列にハードコードされている場合、キーワード間のスペースにのみ一致します。スペースを含むキーワードが配列に配置されている場合は、データベースからの結果であり、preg_match_allは失敗し、結果は0になります。preg_match_allはmysqlデータベースの結果変数で動作しませんか?

だから私は、配列を作成するには、この操作を行う場合preg_match_allは段階が、 の両方がありますtexttoscanに対してそれをチェックし

$myarray = array("This is my Phrase","This is my Second Phrase"); 

のようなIハードコードPHPの配列の場合と:

$result1 = mysql_result($result,$i,"firstphrase"); 
    $result2 = mysql_result($result,$i,"secondphrase"); 
    $myarray = array($result1,$result2); 

以下のpreg_match_allは失敗し、フレーズを見つけることはできませんが、フレーズではなく1つの単語で配列を設定すると動作します。だから私は、データベースから返されるスペースを含む文字列を準備する必要があると仮定しますが、私は正規表現パターンを再フォーマットする必要がありますか、それを行う方法を正確にはわかりませんか?

foreach ($myarray as $K) { 
    $pattern = "/\b($K)\b/"; 
    $count = preg_match_all($pattern, $texttoscan, $matches); 
    if($count > 0){ echo "matched"; } 
} 
+0

これはエンコードの問題のような匂いがします。 'strlen($ texttoscan)'は、あなたが期待していた、あるいはそれよりも奇妙な結果でしたか?また、あなたのPHPソースはどのエンコーディングに保存されていますか? – Jon

答えて

0

データベーステキストに改行文字が含まれている可能性がありますか?その場合は、複数行一致を許可するために修飾子mを使用します。それは正規表現を作るでしょう:

$pattern = "/\b($K)\b/m"; 

希望に役立ちます。また、特にUTFの単語/文字に一致させようとしているのでなければ、それに問題はないはずです。

+0

うわー、まさにそれはそれだったことに感謝して、それは今の魅力のように働く:D – Binxalot

+0

問題はない、私はその前に落ちた... –

+0

助けがあれば答えを評価してもらえますか?ありがとう。 –

関連する問題