0

マルチバイト文字列のスペースまたはハイフンを検出したい。
最初に、文字列を文字の配列に分割します

$chrArray = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);

次に、それらの記号をハイフンまたはスペースと比較してみます

foreach ($chrArray as $char) {
    if ($char == '-' || $char == ' ') {
        // Do something
    }
}

ああ、これは動作しません。わかりました、なぜですか?たぶん、ASCIIのそれらの記号のためですか?

echo mb_detect_encoding('-'); // ASCII

さて、私はそれを処理しようとします。

    $encoding = mb_detect_encoding($str); // UTF-8
    $dash = mb_convert_encoding('-', $encoding);
    $space = mb_convert_encoding(' ', $encoding);

ああ、でもそれもうまくいきません。一瞬待って...

echo mb_detect_encoding($dash); // ASCII

!!! 何が起こっていますか???どうすればやりたいことができますか?

4

1 に答える 1

0

正規表現を使用するようになりました。これです

"/(?<=-| |^)([\w]*)/u"

前の位置にハイフン、スペース、または何もない(行の最初)が含まれるUnicode内のすべての単語を検索します。chars配列を繰り返す代わりに、preg_replace_callback(PHP> = 5.4.1mb_ereg_replace_callbackで使用できます)を使用しています。

于 2012-09-09T13:49:26.597 に答える