用逗号分割字符串,后跟空格、单词,然后是冒号

问题描述 投票:0回答:2

我正在使用 API 并通过 API 获取结果。我在分割数组的分隔方面遇到问题。以下是我从 API 收到的示例数据:

姓名:jo mamma,地点:佐治亚州亚特兰大,描述:他是一个好人 男孩,而且他很有趣,技能:一点也不多!

我希望能够像这样拆分:

名称:乔妈妈

地点:佐治亚州亚特兰大

描述:他是个好孩子,而且很有趣

技能:一点也不多!

我尝试使用explode函数和正则表达式preg_split。

$exploded = explode(",", $data);
$regex = preg_split("/,\s/", $data);

但没有得到预期的结果,因为它也在男孩之后和乔治亚州之后分裂。结果如下:

姓名:乔妈妈

地点:亚特兰大

格鲁吉亚

描述:他是个好孩子

他很有趣

技能:一点也不多!

php regex split preg-split
2个回答
2
投票

只需使用 Zero-Width Positive Lookahead 进行这个简单的分割即可。 (它将仅被

,
分割,之后有类似
name:
的文本)。

$regex = preg_split("/,\s*(?=\w+\:)/", $data);
/*
Array
    (
       [0] => "name: jo mamma"
       [1] => "location: Atlanta, Georgia"
       [2] => "description: He is a good boy, and he is pretty funny"
       [3] => "skills: not much at all!"
    )
 */ 

从此处了解有关前向和后向的更多信息:http://www.regular-expressions.info/lookaround.html


2
投票

使用这个正则表达式:

name:\s(.*),\slocation:\s(.*),\sdescription:\s(.*),\sskills:\s(.*)

$text = 'name: jo mamma, location: Atlanta, Georgia, description: He is a good boy, and he is pretty funny, skills: not much at all!';
preg_match_all('/name:\s(.*),\slocation:\s(.*),\sdescription:\s(.*),\sskills:\s(.*)/', $text, $text_matches); 

for ($index = 1; $index < count($text_matches); $index++) {
    echo $text_matches[$index][0].'<br />';
}

输出:

jo mamma
Atlanta, Georgia
He is a good boy, and he is pretty funny
not much at all!

正则表达式101

© www.soinside.com 2019 - 2024. All rights reserved.