最速のアプローチを探している間、チャレンジに独自のアプローチを追加すると思いました。
<?php
$q = 'Opera "adds cross-platform hardware" "kicks butt" -hippies';
echo '<div>'.$q.'</div>';
$p0 = explode(' ',$q);
echo '<div><pre>';print_r($p0);echo '</pre></div>';
$open = false;
$terms = array();
foreach ($p0 as $key)
{
if ($open==false)
{
if (substr($key,0,1)=='"')
{
$open = $key;
}
else {array_push($terms,$key);}
}
else if (substr($key,strlen($key) - 1,strlen($key))=='"')
{
$open = $open.' '.$key;
array_push($terms,$open);
$open = false;
}
else
{
$open = $open.' '.$key;
}
}
echo '<div><pre>';print_r($terms);echo '</pre></div>';
echo '<div><pre>';print_r($open);echo '</pre></div>';
?>
以下を出力します...
Opera「クロスプラットフォームのハードウェアを追加」「お尻を蹴る」 - ヒッピー
//スペースによる最初の爆発...
配列 (
[0] => Opera
[1] => "adds
[2] => cross-platform
[3] => hardware"
[4] => "kicks
[5] => butt"
[6] => -hippies
)
//最終結果...
配列 (
[0] => Opera
[1] => "adds cross-platform hardware"
[2] => "kicks butt"
[3] => -hippies
)