<?php
$string = 'some gibberish here [tab title="Emergency Contact" important="true"] some additional info here';
$regex = '~
(?:\[tab\s # looks for [tab + whitespace literally
| # or
(?!\A)\G\s) # (?!\A) = negative lookahead
# to make sure the following is not the start
# of the string
# \G matches at the end of the previous match
(?P<key>\w+) # match a word character greedily to group "key"
=
"(?P<value>[^"]+)" # " + anything not " + ", save this to group "value"
~x'; # verbose modifier
foreach ($matches as $match)
echo "Key: {$match['key']}, Value: {$match['value']}\n";
?>
PD9waHAKCiRzdHJpbmcgPSAnc29tZSBnaWJiZXJpc2ggaGVyZSBbdGFiIHRpdGxlPSJFbWVyZ2VuY3kgQ29udGFjdCIgaW1wb3J0YW50PSJ0cnVlIl0gc29tZSBhZGRpdGlvbmFsIGluZm8gaGVyZSc7CgokcmVnZXggPSAnfgogICAgICAgICAgICAoPzpcW3RhYlxzICAgICAgICAgIyBsb29rcyBmb3IgW3RhYiArIHdoaXRlc3BhY2UgbGl0ZXJhbGx5CiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAjIG9yCiAgICAgICAgICAgICg/IVxBKVxHXHMpICAgICAgICAjICg/IVxBKSA9IG5lZ2F0aXZlIGxvb2thaGVhZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0byBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBpcyBub3QgdGhlIHN0YXJ0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9mIHRoZSBzdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgXEcgbWF0Y2hlcyBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBtYXRjaAogICAgICAgICAgICAoP1A8a2V5Plx3KykgICAgICAgIyBtYXRjaCBhIHdvcmQgY2hhcmFjdGVyIGdyZWVkaWx5IHRvIGdyb3VwICJrZXkiCiAgICAgICAgICAgID0KICAgICAgICAgICAgIig/UDx2YWx1ZT5bXiJdKykiICMgIiArIGFueXRoaW5nIG5vdCAiICsgIiwgc2F2ZSB0aGlzIHRvIGdyb3VwICJ2YWx1ZSIKICAgICAgICAgfngnOyAgICAgICAgICAgICAgICAgICMgdmVyYm9zZSBtb2RpZmllcgpwcmVnX21hdGNoX2FsbCgkcmVnZXgsICRzdHJpbmcsICRtYXRjaGVzLCBQUkVHX1NFVF9PUkRFUik7CmZvcmVhY2ggKCRtYXRjaGVzIGFzICRtYXRjaCkKICAgIGVjaG8gIktleTogeyRtYXRjaFsna2V5J119LCBWYWx1ZTogeyRtYXRjaFsndmFsdWUnXX1cbiI7Cj8+