0

サンプルテキストがあります:

$text = "ác, def ác ghi ác xyz ác, jkl";
$search = "ác";
$_x_word = '/(\s)'.$search.'(\s)/i';
preg_match($_x_word, $text, $match_words);
echo count($match_words);

私がechocount($ match_words)の場合、結果はnullになります

出力を修正する方法は2です

4

5 に答える 5

0

使用する:

preg_match_all($_x_word, $text, $match_words, PREG_SET_ORDER);

あなたの代わりにpreg_match

于 2012-05-18T07:49:45.603 に答える
0

Unicode マッチングを終了するには、変更を加えて使用する必要がありますpreg_match_all。実際の一致を得るには、括弧を変更します。/u

<?php
    $text = "ác, def ác ghi ác xyz ác, jkl";
    $search = "ác";
    $_x_word = '/\s('.$search.')\s/ui';
    preg_match_all($_x_word, $text, $match_words);

    //full matches (with spaces)
    var_dump($match_words[0]);
    //only  ác matches.
    var_dump($match_words[1]);
于 2012-05-18T08:00:33.993 に答える
0

このような何かがそれを行うかもしれません:

echo \preg_match_all('/\sác\s/i', "ác, def ác ghi ác xyz ác, jkl");

于 2012-05-18T07:36:20.943 に答える
0

まず、これを行うときは、必ずpreg_quotearoundを使用し$searchて正規表現区切り文字をエスケープしてください。

次に、コードは完全に問題ありません(なしでもpreg_quote)。それは私のために3を出力します。文字列に非 ASCII 文字が含まれているため、ファイルのエンコードに問題がある可能性があります。UTF8を使ってみましたか?

于 2012-05-18T07:37:27.350 に答える
0

次のように変更します。

$text = "ghi ác xyz ác, jkl";
$search = "ác";
$_x_word = '/\s(' . preg_quote($search) . ')\s/i';
preg_match_all($_x_word, $text, $match_words);
var_dump($match_words);

http://ideone.com/hZD3X

私が行った変更:

  1. 括弧を削除\s- 空白の一致は必要ありません
  2. $search(括弧で囲まれた)の一致するグループを追加しました
  3. 追加したpreg_quote
  4. 紹介されたvar_dump
  5. preg_matchに変更preg_match_all

PS:おそらく\b代わりに\s使用する方が良いでしょう

于 2012-05-18T07:40:15.330 に答える