PHP 文字列を単語で分割するには?

ショコラ
ショコラ

PHP 文字列を単語で分割するには?

『スペースで区切られた文字列があります。 スペースで区切って単語を取り出したいのですが、ダブルクォートで括られた箇所はスペースを繋げて取り出したいです。 このプログラムをPHPでmbストリング系の関数を使って書きなさい。』

もっさん先輩
もっさん先輩
<?php
function extractWords($inputString) {
  $words = [];
  $quoteOpen = false;
  $word = '';

  $delimiter = ' ';
  $stringLength = mb_strlen($inputString);

  for ($i = 0; $i < $stringLength; $i++) {
    $char = mb_substr($inputString, $i, 1);

    if ($char === '"') {
      $quoteOpen = !$quoteOpen;
    } elseif ($char === ' ' && !$quoteOpen) {
      if ($word !== '') {
        $words[] = $word;
        $word = '';
      }
    } else {
      $word .= $char;
    }
  }

  if ($word !== '') {
    $words[] = $word;
  }

  return $words;
}

$inputString = 'This is a "sample string" for testing';
$words = extractWords($inputString);

foreach ($words as $word) {
  echo $word . "\n";
}
?>

上記のコードでは、extractWords関数を定義し、指定された文字列から単語を抽出するロジックを実装しています。$inputString変数にはスペースで区切られた文字列を指定してください。抽出された単語は、$words配列に格納され、foreachループを使用して1つずつ表示されます。

私は全角スペースでも区切れるように、少し手を加えました。

  // 文字列をスペースで単語に分割します。
  public static function extractWords($inputString)
  {
    $words = [];
    $quoteOpen = false;
    $word = '';
    $len = mb_strlen($inputString);
    for ($i=0; $i < $len; $i++) {
      $char = mb_substr($inputString, $i, 1);

      if ($char === '"') {
        $quoteOpen = !$quoteOpen;
      }
      elseif (in_array($char,[' ',' '],true) && !$quoteOpen) {
        if ($word !== '') {
          $words[] = $word;
          $word = '';
        }
      }
      else {
        $word .= $char;
      }
    }
    if ('' !== $word) {
      $words[] = $word;
    }
    return $words;
  }

以上

Scroll to Top