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

Create an array based on a specific string in PHP

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

[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);

我好不容易拉出了"keys",但是不知道怎么拉出他们的"values"。有什么想法吗?

预先感谢您的帮助,我为我的英语道歉。

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

'~\[(\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)
}