检索带冒号的单词和相关数据

时间:2014-05-06 23:40:53

标签: php regex

我的数据格式如下:

some words go here priority: p1,p2 -rank:3 status: not delayed

基本上我需要检索与冒号名称对应的每组数据。

理想情况下,如果我最终得到一个数组结构

keywords => 'some words go here'
priority => 'p1,p2'
-rank    => 3
status   => 'not delayed'

一些警告:

  1. 关键字没有定义冒号字(关键字只放在前面)

  2. 关键字并不总是存在(可能只是冒号词)

  3. 冒号词并不总是存在(可能只是关键词)

  4. 我认为必须使用正则表达式来解析它,但这超出了我对正则表达式的理解。 如果有一个更简单的方法,我很乐意找到。 任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

正如@HamZa所展示的那样,正则表达式肯定会是一种更优雅的方法,但这里有一个概念证明,可以说明你可以强行解决问题。请记住,这是一个概念证明,我不会为您完成整个任务;)

<?php
$string = "keywords go here priority: p1,p2 -rank:3 status: not delayed";

$kv = array();

$key = "keywords";
$substrings = explode(":", $string);

foreach($substrings as $k => $substring) {
        $pieces = explode(" ", $substring);

        $chunk = $k == count($substrings) - 1 ? 0 : 1;

        $kv[$key] = trim(join(" ", array_slice($pieces, 0, count($pieces)-$chunk)));
        $key = $pieces[count($pieces)-1];
}

print_r($kv);

// Array
// (
//   [keywords] => keywords go here
//   [priority] => p1,p2
//   [-rank] => 3
//   [status] => not delayed
// )