请帮帮我,由于严格的截止日期,我有一个必须立即解决的案件.. :(我有一个使用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
)
感谢您的指导和帮助.. :)
请注意,键和字符串被引号括起来,[
]
$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
代码:
<?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)
参考:
- preg_match
- preg_split
- preg_match_all
解释:
首先,我们应该决定使用哪个函数。正如手册所说:
preg_match()
返回模式匹配的次数。那将是0
次(不匹配)或1
时间,因为preg_match()
将停止 在第一场比赛后搜索。 相反preg_match_all()
继续,直到到达主题结束。preg_match()
回报FALSE
是否发生错误。和
preg_split()
返回一个包含主题拆分子字符串的数组 沿着与模式匹配的边界。由于您的目标是捕获大括号之间的内容,因此我选择
preg_match_all
轻松处理任务。当然,你可以用preg_split
艰难的方式:)- 来到模式:一切都与正则表达式有关
-
'{(.+?)'},?
:我们捕获一对大括号内的内容。+
站起来跳过像{}
这样的空括号。尝试将一些空对{}
放入$str1
,并将+
更改为*
,看看会发生什么。也是指定非贪婪的?
标记。+?
的意思是,我们不需要像{foo}{bar}
foo}{bar
这样的东西,而是单独foo
和bar
。,?
的意思是可以有逗号,也可以没有逗号。 -
('w+)':'w+,?
: 我们捕获一对key
key:value
-
希望这对:)有所帮助