我有问题,我想问这个字符串:
[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);
我设法拔出“键”,但是我不知道如何拔出它们的“值”。有什么想法吗?
在此先感谢您的帮助,我对我的英语表示歉意。
答案 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)
}