サンプルテキストがあります:
$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です
サンプルテキストがあります:
$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です
使用する:
preg_match_all($_x_word, $text, $match_words, PREG_SET_ORDER);
あなたの代わりにpreg_match
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]);
このような何かがそれを行うかもしれません:
echo \preg_match_all('/\sác\s/i', "ác, def ác ghi ác xyz ác, jkl");
まず、これを行うときは、必ずpreg_quote
aroundを使用し$search
て正規表現区切り文字をエスケープしてください。
次に、コードは完全に問題ありません(なしでもpreg_quote
)。それは私のために3を出力します。文字列に非 ASCII 文字が含まれているため、ファイルのエンコードに問題がある可能性があります。UTF8を使ってみましたか?
次のように変更します。
$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);
私が行った変更:
\s
- 空白の一致は必要ありません$search
(括弧で囲まれた)の一致するグループを追加しましたpreg_quote
var_dump
preg_match
に変更preg_match_all
PS:おそらく\b
代わりに\s
使用する方が良いでしょう