0

我有一个看起来像这样的字符串:

'word','another word','and a sentence','and more','etc etc'

我需要将它分成两个字符串,除以第二个逗号,这两个逗号都不应该出现在任何一个句子中。使事情复杂化的是,这里也可以是字符串的各个引号部分内的逗号。

谁能帮我?

4

4 回答 4

1

这很像 CSV 语法,所以:

$parsed  = str_getcsv($string, ',', "'");
$string1 = join(',', array_slice($parsed, 0, 2));
$string2 = join(',', array_slice($parsed, 2));

如果您的 PHP 版本低于 5.3,因此您没有str_getcsv,您可以使用虚拟文件句柄将其复制到php://tempfgetcsv.

或者,根据您的语法的难易程度,strtok可以将其用于简单的解析器。找到第一个',然后是下一个',然后是 a ,,然后是 a ',然后是下一个,然后'你就有了字符串的第一部分......

于 2013-04-10T06:09:01.890 回答
0

既然你说引号之间可以有逗号..所以preg_split可以比爆炸更好地帮助你

        <?php

                 $string = "'word','another word','and a sentence','and more','etc etc'";
                 $pattern = '%\',\'%';
                 $split = preg_split($pattern,$string);
                 $array1 = array();
                 $array2 = array();
                 foreach($split as $key=>$value)
                 {
                    $value  = trim($value,"'");
                    $value = "'{$value}'";

                    if(($key === 0) || ($key ===1))
                    {
                        $array1[] = $value;
                    }
                    else
                    {
                        $array2[] = $value; 
                    }
                 }

                echo $req_string1 = implode(',',$array1);
                echo "<br>";
                echo $req_string2 = implode(',',$array2);     


             ?>
于 2013-04-10T06:26:53.307 回答
0
$a="'word','another word','and a sentence','and more','etc etc'";

//preg_match('{(.*?,[^,]*),(.*)}', $a, $matches);
preg_match('{(.*?[^\\\\]\',.*?[^\\\\]\'),(.*)}', $a, $matches); //UPDATE 
print_r($matches);

展示:

    Array
(
    [0] => 'word','another word','and a sentence','and more','etc etc'
    [1] => 'word','another word'
    [2] => 'and a sentence','and more','etc etc'
)
于 2013-04-10T07:32:12.740 回答
0

引号之间的逗号

$a="'word','another word','and a sentence','and more','etc etc'";

eval("\$arr =  array($a);");

$text1='';
$text2='';
foreach($arr AS $k=>$v){
    if($k<2){
        $text1.=$text1?',':'';
        $text1.="'{$v}'";
    }else{
        $text2.=$text2?',':'';
        $text2.="'{$v}'";
    }
}
echo $text1;
echo PHP_EOL;
echo $text2;

'单词','另一个单词'

'and a sentence','and more','etc etc'

于 2013-04-10T07:56:50.333 回答