2010-12-13 32 views
2

J'ai un tel CSS en ligne comme celui-ciAnalyser les valeurs CSS en ligne avec Regex?

color: # 777; font-size: 16px; font-weight: bold; gauche: 214px; position: relative; top: 70px

Le CSS peut se terminer par un point-virgule ";" ou pas. Il peut également contenir un espace supplémentaire entre ses valeurs. Je suis sur l'utilisation de "exploser" fonction pour analyser le CSS dans un tableau, quelque chose comme:

Array (
"couleur" => "# 777",
"font-size" => " 16px »,
"font-weight"=> "gras",

et ainsi de suite.

Quelqu'un peut-il me suggérer un moyen d'utiliser une expression régulière pour effectuer cette tâche?

+1

duplication possible de [Analyser CSS par regex] (http://stackoverflow.com/questions/236979/parsing-css-by-regex) – Gordon

+0

Merci pour le lien, mais son sujet est d'analyser l'ensemble du fichier CSS ou CSS dans " style "avec des sélecteurs. Je suis à propos de l'analyse de CSS en ligne seulement qui est dans l'attribut "style" d'un élément. – Teiv

Répondre

3

Une autre façon, en utilisant une expression régulière:

$css = "color:#777;font-size:16px;font-weight:bold;left:214px;position:relative;top: 70px"; 

$results = array(); 
preg_match_all("/([\w-]+)\s*:\s*([^;]+)\s*;?/", $css, $matches, PREG_SET_ORDER); 
foreach ($matches as $match) { 
    $results[$match[1]] = $match[2]; 
} 

print_r($results); 

Sorties:

 
Array 
(
    [color] => #777 
    [font-size] => 16px 
    [font-weight] => bold 
    [left] => 214px 
    [position] => relative 
    [top] => 70px 
)
3

Voici un script rapide et sale qui fait ce que vous demandez:

<?php 

$css = "color:#777;font-size:16px;font-weight:bold;left:214px;position:relative;top: 70px"; 

$attrs = explode(";", $css); 

foreach ($attrs as $attr) { 
    if (strlen(trim($attr)) > 0) { 
     $kv = explode(":", trim($attr)); 
     $parsed[trim($kv[0])] = trim($kv[1]); 
    } 
} 
?> 

Et la sortie de print_r($parsed) est:

Array 
(
    [color] => #777 
    [font-size] => 16px 
    [font-weight] => bold 
    [left] => 214px 
    [position] => relative 
    [top] => 70px 
) 
+2

Ceci romprait avec: 'background-image: url (/example.jpeg ?arg=1;arg=2);'. Les expressions régulières ne sont pas un bon choix pour analyser des données non régulières. – Quentin

+0

@David Dorward - Bien sûr - ce cas casserait cette solution, ou tout autre analyseur "simple" que vous avez écrit, mais cette réponse n'utilise pas d'expressions régulières ... Tout simplement vieux 'explode's - Peut-être que vous devriez diriger les RE détestent quelque part ailleurs cette fois;) – gnarf

+0

Oups. Cela m'apprend à supposer qu'il répond réellement à la question;) Il souffre quand même du même problème. Vous avez besoin d'un analyseur CSS approprié pour analyser CSS. – Quentin