0

请帮助我,由于截止日期严格,我有一个必须立即解决的案例.. :( 我有一个想法使用 preg_match 或 preg_split 来解决这个问题,并且尝试了很多方法来使用它但仍然不明白如何使用它.也许有人可以指导我,关于这个案例,这样我就可以更多地了解如何使用 preg_match 或 preg_split。

//从这个字符串

$temp = "{foo:bar,bar:foo},{_id:1,nama:1,nim:1}";

//如何将它分配给数组所以结果将是这样的

Array
(
[0]=>foo:bar,bar:foo
[1]=>_id:1,nama:1,nim:1
)

//也是第二个字符串

$temp2 = "_id:1,nama:1,nim:1";

//如何将它分配给数组所以结果将是这样的

Array
(
[0] => _id
[1] => nama
[2] => nim
)

感谢您的指导和帮助.. :)

4

2 回答 2

0

代码:

<?php

$str1 = "{foo:bar,bar:foo},{_id:1,nama:1,nim:1}";
preg_match_all('/\{(.+?)\},?/', $str1, $matches);
var_dump($matches[1]);

$str2 = "_id:1,nama:2,nim:3";
preg_match_all('/(\w+)\:\w+,?/', $str2, $matches);
var_dump($matches[1]);

?>

结果:

array
  0 => string 'foo:bar,bar:foo' (length=15)
  1 => string '_id:1,nama:1,nim:1' (length=18)
array
  0 => string '_id' (length=3)
  1 => string 'nama' (length=4)
  2 => string 'nim' (length=3)

参考:

解释:

  1. 首先,我们应该决定使用哪个函数。正如手册所说:

    preg_match()返回模式匹配的次数。这将是0时间(不匹配)或1时间,因为preg_match()将在第一次匹配后停止搜索。preg_match_all()相反会一直持续到主题结束。如果发生错误则preg_match()返回 。FALSE

    preg_split()返回一个数组,其中包含沿由模式匹配的边界拆分的主题子字符串。

    由于您的目标是捕获大括号之间的内容,因此我选择 preg_match_all轻松处理该任务。当然,你可以用 preg_split艰难的方式做到这一点:)

  2. 来到模式:一切都与正则表达式有关
    1. \{(.+?)\},?:我们捕获一对花括号内的内容。+站立跳过空大括号之类的{}。尝试将一些空对{}放入$str1并更改+*,看看会发生什么。也是?指定非贪婪的标记。+?意味着我们不需要像foo}{barfrom之类的东西,{foo}{bar}而是需要单独的东西。表示可以有逗号,也可以没有。foobar,?
    2. (\w+)\:\w+,?key: 我们成对捕获key:value

希望这有帮助:)

于 2012-06-17T11:03:20.610 回答
0

注意键和字符串被引用,[ ]$temp 周围是一个数组,第二部分我转换array[1]成一个 json 字符串,然后返回一个数组,然后使用 array_keys 创建一个键数组。

$temp = '{"foo":"bar","bar":"foo"},{"_id":1,"nama":1,"nim":1}';
$temp = "[$temp]";
$array = json_decode($temp);

$keys = array_keys(json_decode(json_encode($array[1]), true));

json_encode json_decode array_keys

于 2012-06-17T06:14:57.617 回答