0

我有来自表单的以下字符串...

Opera“添加跨平台硬件”“踢屁股”-嬉皮士

一般来说,我一直在使用以下...

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

但是,现在我想将任何和所有引号运算符维护为单个数组项,而不是让它们创建单独的项,例如"adds,cross-platformhardware".

我想让那个字符串最终创建一个像这样的数组......

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 回答