我有以下表格的字符串..。
Opera“添加跨平台硬件”“踢屁股”-hippies
一般来说,我只是用了以下几种方法.
$p0 = explode(' ',$string);但是,现在我希望将任何和所有引号操作符保持为一个数组项,而不是让它们创建单独的项,如"adds、cross-platform和hardware"。
我想让这个字符串创建这样的数组.
Array
(
[0] => 'Opera',
[1] => 'adds cross-platform hardware',
[2] => 'kicks butt',
[3] => '-hippies'
)我通常不喜欢在任何可能的情况下使用regex。
发布于 2012-08-27 04:43:24
你可以用preg_match_all(...):
$text = 'Opera "adds cross-platform hardware" "kicks butt" -hippies';
preg_match_all('/"(?:\\\\.|[^\\\\"])*"|\S+/', $text, $matches);
print_r($matches);发布于 2012-08-27 04:53:14
不要使用regex,这是一种粗略的代码。
<?
$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-27 05:09:16
当我在寻找最快的方法时,我想我会在挑战中加入我自己的方法。
<?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“添加跨平台硬件”“踢屁股”-hippies //由空间开始爆炸..。 阵列( => Opera 1 =>“添加2 =>跨平台3 =>硬件”4 =>“踢5 =>对接”6 => -hippies ) //最终结果。 阵列( => Opera 1 =>“添加跨平台硬件”2 =>“踢屁股”3 => -hippies )
https://stackoverflow.com/questions/12136277
复制相似问题