gpt4 book ai didi

php - 字符串转数组,用单引号和双引号分隔

转载 作者:可可西里 更新时间:2023-11-01 01:05:20 31 4
gpt4 key购买 nike

我正在尝试使用 php 将字符串拆分为数组组件,使用 "' 作为分隔符。我只想按最外层的字符串拆分。这里有四个例子和每个例子的期望结果:

$pattern = "?????";
$str = "the cat 'sat on' the mat";
$res = preg_split($pattern, $str);
print_r($res);
/*output:
Array
(
[0] => the cat
[1] => 'sat on'
[2] => the mat
)*/

$str = "the cat \"sat on\" the mat";
$res = preg_split($pattern, $str);
print_r($res);
/*output:
Array
(
[0] => the cat
[1] => "sat on"
[2] => the mat
)*/

$str = "the \"cat 'sat' on\" the mat";
$res = preg_split($pattern, $str);
print_r($res);
/*output:
Array
(
[0] => the
[1] => "cat 'sat' on"
[2] => the mat
)*/

$str = "the 'cat \"sat\" on' the mat 'when \"it\" was' seventeen";
$res = preg_split($pattern, $str);
print_r($res);
/*output:
Array
(
[0] => the
[1] => 'cat "sat" on'
[2] => the mat
[3] => 'when "it" was'
[4] => seventeen
)*/

如您所见,我只想按最外层的引号拆分,我想忽略引号内的任何引号。

我为 $pattern 想出的最接近的是

$pattern = "/((?P<quot>['\"])[^(?P=quot)]*?(?P=quot))/";

但显然这是行不通的。

最佳答案

您可以将 preg_splitPREG_SPLIT_DELIM_CAPTURE 选项一起使用。正则表达式不如@Jan Turoň 的反向引用方法优雅,因为所需的捕获组会弄乱结果。

$str = "the 'cat \"sat\" on' the mat the \"cat 'sat' on\" the mat";
$match = preg_split("/('[^']*'|\"[^\"]*\")/U", $str, null, PREG_SPLIT_DELIM_CAPTURE);
print_r($match);

关于php - 字符串转数组,用单引号和双引号分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12353518/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com