0

フォームから次の文字列があります...

Opera「クロスプラットフォームのハードウェアを追加」「お尻を蹴る」 - ヒッピー

一般的に、私は単に次のものを使用しています...

$p0 = explode(' ',$string);

ただし、今では、すべての引用演算子を単一の配列項目として維持したいと考えて"addscross-platformますhardware"

その文字列がこのような配列を作成するようにしたい...

Array
(
    [0] => 'Opera',
    [1] => 'adds cross-platform hardware',
    [2] => 'kicks butt',
    [3] => '-hippies'
)

私は通常、可能な限りほとんどの場合、正規表現を使用しないことを好みます。

4

4 に答える 4

5

あなたは使用することができますpreg_match_all(...):

$text = 'Opera "adds cross-platform hardware" "kicks butt" -hippies';
preg_match_all('/"(?:\\\\.|[^\\\\"])*"|\S+/', $text, $matches);
print_r($matches);
于 2012-08-27T04:43:24.827 に答える
3

PHP >= 5.3 を使用している場合は、str_getcsvを使用できます。

print_r(str_getcsv('Opera "adds cross-platform hardware" "kicks butt" -hippies'," "));

版画

Array
(
    [0] => Opera
    [1] => adds cross-platform hardware
    [2] => kicks butt
    [3] => -hippies
)
于 2012-08-27T05:04:43.557 に答える
0

最速のアプローチを探している間、チャレンジに独自のアプローチを追加すると思いました。

<?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

)

于 2012-08-27T05:09:16.780 に答える
0

大まかなコードである正規表現を使用せずにこれを試してください

<?
$string='Opera "adds cross-platform hardware" "kicks butt" -hippies';
$g=explodeMe($string);
echo "<pre>";
print_r($g);
echo "</pre>";

function explodeMe($string){
    $k=explode('"',$string);
    foreach ($k as $key => $link)
    {
        if ($k[$key] == ' ')
        {
            unset($k[$key]);
        }
    }
    return array_values($k);
}
?>
于 2012-08-27T04:53:14.450 に答える