2014-11-21 2 views
1
fontSize=16.0, fontFamily=sans, align=0, color=FF0000, text="foo, bar" 

, и мне нужна спичка для косы. Выход будетРегулярные совпадения для сплита

array(
    'fontSize'=>'16.0', 
    'fontFamily'=>'sans', 
    'align'=>'0', 
    'color'=>'FF0000', 
    'text'=>'foo, bar' 
); 

Я попробовал следующий, но это было плохо:

preg_spit("~[\s]="?[\s]"?,~", $string); 
+0

'preg_spit ("~ [\ s] = \"[\ s] \ "?, ~", $ строка?);' –

+0

вы не можете разделить на ',', потому что, находится в '' foo, bar "' –

ответ

0

Просто разделить вашу входную строку в соответствии с приведенным ниже регулярным выражением,

,\s(?![^=]*") 

DEMO

<?php 
$str = 'fontSize=16.0, fontFamily=sans, align=0, color=FF0000, text="foo, bar"'; 
$regex = '~,\s(?![^=]*")~'; 
$splits = preg_split($regex, $str); 
print_r($splits); 
?> 

Выход:

Array 
(
    [0] => fontSize=16.0 
    [1] => fontFamily=sans 
    [2] => align=0 
    [3] => color=FF0000 
    [4] => text="foo, bar" 
) 

Регулярное выражение:

,      ',' 
\s      whitespace (\n, \r, \t, \f, and " ") 
(?!      look ahead to see if there is not: 
    [^=]*     any character except: '=' (0 or more 
          times) 
    "      '"' 
)      end of look-ahead 
+0

Thats it! С уважением –

Смежные вопросы