Diakon
29.06.2015 - 23:54
Добрый день!
Вот есть строка:
$str = "[name=val][name2=val2][name3=val3]";
подскажите регулярку, которая разберет эту строку на массив
array (
'[name=val]',
'[name2=val2]',
'[name3=val3]'
);
Спасибо всем, кто поможет!
inpost
30.06.2015 - 01:17
А зачем такую кривую строку делать?
Может стоит всё же подправить код и отдавать какую-нибудь серилизацию, json, xml ?
explode по запятой, trim на '[] символы. Далее у тебя будет чистый key=value. Можно ещё один explode, и никакие регулярки не нужны.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
S.Chushkin
30.06.2015 - 03:09
inpost, ну хочется человеку регулярку - пусть получит.
ТС, пробуйте так:
$s = "[name=val][name2=val2][name3=val3]";
var_dump(preg_split('/(?<=\])(?=\[)/', $s));
upd: Ах да, - PREG_SPLIT_DELIM_CAPTURE здесь не нужен. Убрал.
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
я хз зачем это, но вот так можно.
$str = "[name=val][name2=val2][name3=val3]";
$str = str_replace('][','],[',$str);
print_r( explode(',', $str) );
Игорь_Vasinsky
30.06.2015 - 07:34
Цитата |
var_dump(preg_split('/(?<=\])(?=\[)/', $s, -1, PREG_SPLIT_DELIM_CAPTURE)); |
ого)) и в хвост и в гриву)) бедный ослик.
$s = "[name=val][name2=val2][name3=val3]";
preg_match_all("#\[(.*)\]#U", $s, $matches);
echo '<pre>' . print_r($matches, 1) . '<pre>';
<pre>Array
(
[0] => Array
(
[0] => [name=val]
[1] => [name2=val2]
[2] => [name3=val3]
)
[1] => Array
(
[0] => name=val
[1] => name2=val2
[2] => name3=val3
)
)
<pre>
писать букв меньше.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker