ショコラ
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;
}
以上