Php 获取引号中包含的任何单词

Php 获取引号中包含的任何单词,php,string,Php,String,数据样本$string='“word”、“foo”、“bar”、“foobar”、“barfoo” 之前我只使用了这些: str_replace('"','',$string) explode(',',$string) 我删除了所有引号,并继续用逗号分割它们,但随后我看到了数据示例: $string='“word”、“foo”、“bar”、“foobar”、“bar、foo” 因为我依赖逗号来获取数据,所以我的代码将是错误的 是否有一个php函数可以获取两个给定字符内的子字符串?或者,如果没

数据样本
$string='“word”、“foo”、“bar”、“foobar”、“barfoo”

之前我只使用了这些:

str_replace('"','',$string) 
explode(',',$string)
我删除了所有引号,并继续用逗号分割它们,但随后我看到了数据示例:

$string='“word”、“foo”、“bar”、“foobar”、“bar、foo”

因为我依赖逗号来获取数据,所以我的代码将是错误的

是否有一个php函数可以获取两个给定字符内的子字符串?或者,如果没有,我需要什么函数来正确执行此操作,有什么建议吗?

对于PHP>=5.3 有一个函数用于将CSV字符串解析为数组。如果字符串中有char
(请参见
foo”“bar
),简单正则表达式将失败;或者没有引号/附件(请参见
word

代码:
$string='word,“foo”,“bar”,“foo”,“bar”,“bar,foo”;
打印(str_getcsv($string));
输出:
数组
(
[0]=>word
[1] =>foo
[2] =>巴
[3] =>foo“条
[4] =>巴,福
)
对于PHP<5.3 注释(参见其他示例)区域中的一个小修改示例:

函数str\u getcsv($input,$delimiter=',',$enclosure=',$escape='\\'){
$handle=fopen($handle)php://memory","rw",;
fwrite($handle,$input);
fseek($handle,0);
$data=fgetcsv($handle,4096,$delimiter,$enclosure,$escape);
fclose($handle);
返回$data;
}
对于PHP>=5.3 有一个函数用于将CSV字符串解析到数组中。如果字符串中有char
(请参阅
foo”条
),简单正则表达式将失败,则此函数也可以工作;或者在没有引号/附件的地方(请参见
word

代码:
$string='word,“foo”,“bar”,“foo”,“bar”,“bar,foo”;
打印(str_getcsv($string));
输出:
数组
(
[0]=>word
[1] =>foo
[2] =>巴
[3] =>foo“条
[4] =>巴,福
)
对于PHP<5.3 注释(参见其他示例)区域中的一个小修改示例:

函数str\u getcsv($input,$delimiter=',',$enclosure=',$escape='\\'){
$handle=fopen($handle)php://memory","rw",;
fwrite($handle,$input);
fseek($handle,0);
$data=fgetcsv($handle,4096,$delimiter,$enclosure,$escape);
fclose($handle);
返回$data;
}
您可以使用preg\u match\u all()函数:

$string = '"word","foo","bar","foobar","bar,foo"';
$pattern = '#"(.*?)"#';
preg_match_all($pattern, $string, $matches);
print_r($matches[1]);

Array
(
    [0] => word
    [1] => foo
    [2] => bar
    [3] => foobar
    [4] => bar,foo
)
或者,如果要匹配所有单词:

$pattern = '#([^",]+)#';
preg_match_all($pattern, $string, $matches);
print_r($matches[1]);

Array
(
    [0] => word
    [1] => foo
    [2] => bar
    [3] => foobar
    [4] => bar
    [5] => foo
)
您可以使用preg_match_all()函数:

$string = '"word","foo","bar","foobar","bar,foo"';
$pattern = '#"(.*?)"#';
preg_match_all($pattern, $string, $matches);
print_r($matches[1]);

Array
(
    [0] => word
    [1] => foo
    [2] => bar
    [3] => foobar
    [4] => bar,foo
)
或者,如果要匹配所有单词:

$pattern = '#([^",]+)#';
preg_match_all($pattern, $string, $matches);
print_r($matches[1]);

Array
(
    [0] => word
    [1] => foo
    [2] => bar
    [3] => foobar
    [4] => bar
    [5] => foo
)
移除开头和结尾分隔符后,可以通过“
”、“
进行拆分

$trimmed_string = trim($string, '\'"');
explode('","',$trimmed_string);
移除开头和结尾分隔符后,可以通过“
”、“
进行拆分

$trimmed_string = trim($string, '\'"');
explode('","',$trimmed_string);
函数str_getcsv()从PHP 5.3.0开始就可用

对于较低版本的PHP,您可以使用以下内容:

if (!function_exists('str_getcsv')) {

    function str_getcsv($input, $delimiter = ',', $enclosure = '"', $escape = null, $eol = null) {
        $temp = fopen("php://memory", "rw");
        fwrite($temp, $input);
        fseek($temp, 0);
        $r = array();
        while (( $data = fgetcsv($temp, 4096, $delimiter, $enclosure)) !== false) {
            $r[] = $data;
        }
        fclose($temp);
        return $r;
    }

}
但是要小心使用str_getcsv函数-如果存储模块是“在这种情况下测试它:

$string = '"wo"rd","fo"o","b"ar","fo"obar","ba"rfoo"';
我认为在将数据与str_getcsv()函数一起使用之前,必须对数据中的引号进行转义

编辑

我做了一些测试:

$str1 = '"wo"rd","foo"';
$str2 = '"wo""rd","foo"';
$str3 = '"wo\"rd","foo"';

$test_arr1 = str_getcsv($str1);
$test_arr2 = str_getcsv($str2);
$test_arr3 = str_getcsv($str3);

print_r($test_arr1);
print_r($test_arr2);
print_r($test_arr3);
输出为:

数组([0]=>word“[1]=>foo)

数组([0]=>wo“rd[1]=>foo)

数组([0]=>wo\“rd[1]=>foo)

T.B.

函数str_getcsv()从PHP5.3.0开始就可用

对于较低版本的PHP,您可以使用以下内容:

if (!function_exists('str_getcsv')) {

    function str_getcsv($input, $delimiter = ',', $enclosure = '"', $escape = null, $eol = null) {
        $temp = fopen("php://memory", "rw");
        fwrite($temp, $input);
        fseek($temp, 0);
        $r = array();
        while (( $data = fgetcsv($temp, 4096, $delimiter, $enclosure)) !== false) {
            $r[] = $data;
        }
        fclose($temp);
        return $r;
    }

}
但是要小心使用str_getcsv函数-如果存储模块是“在这种情况下测试它:

$string = '"wo"rd","fo"o","b"ar","fo"obar","ba"rfoo"';
我认为在将数据与str_getcsv()函数一起使用之前,必须对数据中的引号进行转义

编辑

我做了一些测试:

$str1 = '"wo"rd","foo"';
$str2 = '"wo""rd","foo"';
$str3 = '"wo\"rd","foo"';

$test_arr1 = str_getcsv($str1);
$test_arr2 = str_getcsv($str2);
$test_arr3 = str_getcsv($str3);

print_r($test_arr1);
print_r($test_arr2);
print_r($test_arr3);
输出为:

数组([0]=>word“[1]=>foo)

数组([0]=>wo“rd[1]=>foo)

数组([0]=>wo\“rd[1]=>foo)



T.B.

问题是,如果一个值中有一个逗号,在索引[4]中它是“barfoo”,对吗?想象一下,如果我按照我的代码去做,它会变成[4]=>“bar”、[5]=>“foo”不,你用
,“
,而不是
。好主意,我增加了你的答案来删除另一个人做的减号。问题是,如果一个值里面有一个逗号,在索引[4]中,它是“barfoo”对吗?想象一下,如果我遵循我的代码,它会变成[4]=>“bar”、[5]=>“foo”不,你是按
,“
,而不是
。好主意,我增加了你的答案,删除了其他人做的减号。如果字符串内部有
,这将失败;示例=
foo”“bar
@Glavić:应该有一个常量作为分隔符,否则,我们无法提取单词delimiter不是
,它是
。Enclosure是
,转义字符是
\
。将所有这些放在正则表达式中,它会晃动;如果字符串有
,这将失败。”
内部;示例=
foo”“bar
@Glavić:应该有常量作为分隔符,否则,我们无法提取单词delimiter不是
,它是
。Enclosure是
,转义字符是
\
。把所有这些放在正则表达式中,它就会震动;)字符串从哪里来?它来自一个api,我只总结了它在stringWhere中字符串来自哪里?它来自一个api,我只总结了它在stringWhere中这是一个新函数,我不知道客户端是否使用了能够处理此函数的php,但它确实工作得很好,而且是一行代码。谢谢SirforMe php 5.3已经过时了;)我添加了PHPT的示例这是一个新函数,我不知道客户端是否使用了能够处理此函数的php,但它确实工作得很好,而且是一个一行代码谢谢SirforMe PHP5.3是旧的;)我已经为仍在+
str_getcsv
fgetcsv
上的phpAre人员添加了示例,他们在
“fo”obar“
“fo”obar“
“fo\”obar”上返回相同的内容这个函数