我有一个表单中的以下字符串…
Opera"增加跨平台硬件"踢屁股"-嬉皮士
一般来说,我只是使用了以下。。。
$p0 = explode(' ',$string);
但是,现在我想将任何和所有引号运算符维护为单个数组项,而不是让它们创建单独的项,如"adds
、cross-platform
和hardware"
。
我想让这个字符串最终创建一个这样的数组。。。
Array
(
[0] => 'Opera',
[1] => 'adds cross-platform hardware',
[2] => 'kicks butt',
[3] => '-hippies'
)
我通常不喜欢在任何可能的情况下对大多数事情使用regex。
您可以使用preg_match_all(...):
$text = 'Opera "adds cross-platform hardware" "kicks butt" -hippies';
preg_match_all('/"(?:\\.|[^\\"])*"|S+/', $text, $matches);
print_r($matches);
如果您使用的是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
)
在不使用regex的情况下尝试此操作,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);
}
?>
当我在寻找最快的方法时,我想我应该在challenge中添加我自己的方法。
<?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>';
?>
输出以下内容。。。
歌剧";增加了跨平台硬件"踢屁股"-嬉皮士
//按空格进行初始爆炸。。。
阵列(
[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
)