Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/01/2010, 13:31
Avatar de neodani
neodani
 
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Parsear hoja de estilo con expresiones regulares

Buenas,

Estoy intentando parsear una hoja de estilo, con expresiones regulares. En mi intento de parsing, deseo encontrar todas las propiedades que coincidan, de la siguiente hoja de estilo

Código CSS:
Ver original
  1. * {
  2.     margin: 0;
  3.     padding: 0; }
  4.  
  5. body {
  6.     border-top-color: #EAF3FA; /* Color barra superior */
  7.     border-top-style: solid;
  8.     border-top-width: 30px;
  9.     color: #333333;
  10.     font-family: "Lucida Grande","Lucida Sans Unicode",Tahoma,Verdana,sans-serif; /*border-top-color:#464646; */
  11.     font-size-adjust: none;
  12.     font-size: 12px;
  13.     font-style: normal;
  14.     font-variant: normal;
  15.     font-weight: normal;
  16.     line-height: normal; }
  17.  
  18. /* PARTE DE ARRIBA (TOP)
  19. ------------------------------------------------- */
  20. #borde-top a {
  21.     color: #0090EF;
  22.     left: 15px;
  23.     position: absolute;
  24.     text-decoration: none;
  25.     top: 7px; }
  26.  
  27. .login #borde-top a:hover { color: #000; }
  28.  
  29. /* TITULO PRINCIPAL (LOGO)
  30. ------------------------------------------------- */
  31. h1 {
  32.     background: url(../imagenes/header/logo-acceso-panel.png) no-repeat;
  33.     display: block;
  34.     height: 40px;
  35.     margin-left: 15px;
  36.     overflow: hidden;
  37.     padding-bottom: 15px;
  38.     text-indent: -9999px;
  39.     width: 320px; }
  40.  
  41. /* FORMULARIO
  42. ------------------------------------------------- */
  43. form {
  44.     -khtml-border-radius: 5px;
  45.     -moz-border-radius: 5px;
  46.     -webkit-border-radius: 5px;
  47.     border-radius: 5px;
  48.     font-weight: bold;
  49.     margin-left: 8px;
  50.     padding: 16px 16px 40px 16px; }
  51.  
  52.     form p { margin-bottom: 24px; }
  53.  
  54. /* Tamaño del recuadro */
  55. #login {
  56.     margin: 7em auto;
  57.     width: 350px; }
  58.  
  59. /* Tamaño de las casillas USER Y PASS */
  60. #user_pass, #user_login {
  61.     font-size: 20px;
  62.     margin-right: 6px;
  63.     padding: 3px;
  64.     width: 97%; }
  65.  
  66. /* Color texto input */
  67. #login form input { color: #555555; }
  68.  
  69. /* Color de fondo LOGIN (azul claro) */
  70. .login form { background-color: #eee; }
  71.  
  72. /* CASILLA >> RECORDARME
  73. ------------------------------------------------- */
  74. form .forgetmenot {
  75.     float: left;
  76.     font-weight: normal;
  77.     margin-bottom: 0;
  78.     margin-left: 2px; }
  79.  
  80. /* BOTON >> INICIAR SESIÓN
  81. ------------------------------------------------- */
  82. #login form .submit input {
  83.     -khtml-border-radius: 3px;
  84.     -moz-border-radius: 3px;
  85.     -webkit-border-radius: 3px;
  86.     background-color: #CEE1EF;
  87.     border-color: #80B5D0;
  88.     border-radius: 3px;
  89.     border-style: solid;
  90.     border-width: 1px;
  91.     border: none;
  92.     color: #224466;
  93.     cursor: pointer;
  94.     float: right;
  95.     font-family: "Lucida Grande", "Lucida Sans Unicode", Tahoma, Verdana, sans-serif;
  96.     font-size: 13px;
  97.     margin-top: -6px;
  98.     padding: 3px 5px;
  99.     text-decoration: none; }
  100.  
  101.     #login form .submit input:hover {
  102.         background-color: #9ACBEF;
  103.         border-color: #328AB2;
  104.         color: #FFF; }
  105.  
  106. /* FOOTER FORMULARIO
  107. ------------------------------------------------- */
  108. #nav {
  109.     margin: 0 0 0 8px;
  110.     padding: 16px;
  111.     text-align: center; }
  112.  
  113. .login #nav a { color: #777777; }
  114.  
  115. /* MENSAJES DE ERROR (FORMULARIO)
  116. ------------------------------------------------- */
  117. #login_error {
  118.     background-color: #FFEBE8;
  119.     border-color: #CC0000;
  120.     border-style: solid;
  121.     border-width: 1px;
  122.     margin: 0 0 13px 8px;
  123.     padding: 8px; }

Debería encontrar estas 3 propiedades

Código CSS:
Ver original
  1. .login #borde-top a:hover{color:#000;}
  2. .login form{background-color:#eee;}
  3. .login #nav a { color: #777777; }

Y aquí la expresión regular que utilizo, que descrita sería algo así como

Encuentra todo lo que empiece por .login seguido de cualquier cosa tantas veces como quieras hasta encontrar una llave }

Código PHP:
Ver original
  1. $css = file_get_contents('style.css');
  2. preg_match_all('/(\.login)(.*?)(})$/is',$css,$matches);
  3. echo "<pre>";
  4. echo print_r($matches,1);
  5. echo "</pre>";

El resultado

Código:
<pre>Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
        )

    [2] => Array
        (
        )

    [3] => Array
        (
        )
)
</pre>
Si quito la última llame me aparece mas cosas pero no me muestra todas las propiedades.

Código PHP:
preg_match_all('/(\.login)(.*?)/is',$css,$matches); 
Código:
<pre>Array
(
    [0] => Array
        (
            [0] => .login
            [1] => .login
            [2] => .login
        )

    [1] => Array
        (
            [0] => .login
            [1] => .login
            [2] => .login
        )

    [2] => Array
        (
            [0] => 
            [1] => 
            [2] => 
        )

)
</pre>
Alguien es tan amable de echarme una mano?

Muchas gracias de antemano!