Vous pourriez utiliser une expression rationnelle :
$text= "ATTRIBUTE1: +VALUE1;\nATTRIBUTE2: -VALUE2%;";
echo "STRING\n" . $text . "\n\n";
preg_match_all("~
^ # match start of line
([^:]+):\s* # match anything that's not a ':' (attribute), followed by a colon and spaces
([+-]) # match a plus or a minus sign
([^%;]+) # match anything that's not a '%' or ';' (value)
(%?) # optionally match percent sign
;\s*$ # match ';' then optional spaces and end of line
~mx", $text, $matches, PREG_SET_ORDER);
print_r($matches);
Imprimés :
STRING
ATTRIBUTE1: +VALUE1;
ATTRIBUTE2: -VALUE2%;
Array
(
[0] => Array
(
[0] => ATTRIBUTE1: +VALUE1;
[1] => ATTRIBUTE1
[2] => +
[3] => VALUE1
[4] =>
)
[1] => Array
(
[0] => ATTRIBUTE2: -VALUE2%;
[1] => ATTRIBUTE2
[2] => -
[3] => VALUE2
[4] => %
)
)
Il se peut que vous deviez jouer avec l'expression rationnelle, mais il y a des commentaires maintenant et cela ne devrait pas être trop difficile à comprendre.