【问题标题】:PHP parsing string to array with regular expressionsPHP使用正则表达式将字符串解析为数组
【发布时间】:2015-07-31 12:45:04
【问题描述】:

我有一个这样的字符串:

$msg,array('goo','gle'),000,"face",'book',['twi'=>'ter','link'=>'edin']

我想使用 preg_match_all 将其转换为如下所示的数组:

array(
     0 => $msg,
     1 => array('goo','gle'),
     2 => 000,
     3 => "face",
     4 => 'book',
     5 => ['twi'=>'ter','link'=>'edin']
);

注意所有的值都是字符串

我不太擅长正则表达式,所以我无法为此创建一个模式。多个 preg 调用也可以。

【问题讨论】:

  • 好吧,我已经回答过了,但是['twi'=>'ter','link'=>'edin'] 和其他人是字符串还是应该定义一个实际的数组?
  • 不,它们都应该作为字符串。

标签: php arrays regex string


【解决方案1】:

我建议将preg_split 与以下正则表达式一起使用:

$re = "/([a-z]*(?:\\[[^]]*\\]|\\([^()]*\\)),?)|(?<=,)/"; 
$str = "\$msg,array('goo','gle'),000,\"face\",'book',['twi'=>'ter','link'=>'edin']"; 
print_r(preg_split($re, $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY));

the sample program 的输出:

Array
(
    [0] => $msg,
    [1] => array('goo','gle'),
    [2] => 000,
    [3] => "face",
    [4] => 'book',
    [5] => ['twi'=>'ter','link'=>'edin']
)

【讨论】:

  • 这太棒了!可以推荐我一些东西来学习那个级别的正则表达式。
  • 这个水平可以用一些时间来达到......我使用正则表达式大约有 6 年了,但说实话,我在 StackOverflow 上大约 3 个月的时间里学到了很多东西。订阅正则表达式标签,注意对高票数问题给出的公认答案,查看由正则表达式“大师”(具有高声誉的用户)标记的最喜欢的问题......这个正则表达式部分是我读到的结果rexegg.com 的正则表达式,部分感谢 @anubhava 的回答。
【解决方案2】:

我知道您要求提供正则表达式解决方案,但我今天正在eval() 踢球:

eval('$array = array('.$string.');');

print_r($array);

还要注意000 不是字符串,将被转换为0

【讨论】:

  • 看来你今天有 evil() 一天 :)?
猜你喜欢
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
相关资源
最近更新 更多