根据PHP中的特定字符串创建数组

时间:2018-10-21 22:45:01

标签: php regex preg-match-all

我有问题,我想问这个字符串:

[NAME: abc] [EMAIL: email@gm.com] [TIMEFRAME: 3 weeks] [BUDGET: 1000 dollars] [MESSAGE: bla bla bla]

将其替换为以下形式的数组:

array(
        'NAME'      => 'abc',
        'EMAIL'     => 'email@gm.com',
        'TIMEFRAME' => '3 weeks',
        'BUDGET'    => '1000 dollars',
        'MESSAGE'   => 'bla bla bla' );

我试图做这样的事情:

$content = str_replace(array('[', ']'), '', '[NAME: abc] [EMAIL: email@gm.com] [TIMEFRAME: 3 weeks] [BUDGET: 1000 dollars] [MESSAGE: bla bla bla]');
preg_match_all('/[A-Z]+\:/', $content, $inputs);

我设法拔出“键”,但是我不知道如何拔出它们的“值”。有什么想法吗?

在此先感谢您的帮助,我对我的英语表示歉意。

1 个答案:

答案 0 :(得分:3)

您可以使用以下正则表达式:

'~\[(\w+):\s*([^][]*)]~'

请参见regex demo

详细信息

  • \[-一个[字符
  • (\w+)-第1组:1个以上的字母,数字或_
  • :-冒号
  • \s*-0+空格
  • ([^][]*)-组2:除[]之外的0+个字符
  • ]-一个]字符。

请参见PHP demo

$s = "[NAME: abc] [EMAIL: cde] [TIMEFRAME: efg] [BUDGET: hij] [MESSAGE: klm]";
if (preg_match_all('~\[(\w+):\s*([^][]*)]~', $s, $m)) {
    array_shift($m); // Removes whole match values from array
    print_r(array_combine($m[0], $m[1])); // Build the result with keys (Group 1) and values (Group 2)
}