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

Cita:
Iniciado por pateketrueke Ver Mensaje
jeje.. es cierto, me falto lo que puede haber entre .login y el primer {

Código PHP:
$str '.login #borde-top a:hover{color:#000;}
.login form{background-color:#eee;}
.login #nav a { color: #777777; }'
;

preg_match_all('/\.login\s*[#\s\w:-]*\{[^\}]*\}/is'$str$matches);
var_dump($matches); 
Ahora sí! gracias pateketrueke, tremendo.

Intento mejorarlo :P, en el caso que no empiece por .login sino que puede que empiece pero no puede que no...

Ejemplo:
Código CSS:
Ver original
  1. #myform form .login input:hover {
  2.     background-color: #9ACBEF;
  3.     border-color: #328AB2;
  4.     color: #FFF; }

Entiendo que la clave está en el primer \.login

Si para indicar uno u otro es con la tubería |
Y los claudators [ ] indican un rango, pienso que algo así quedaría feo, ya lo he probado y no funcionó

[\.login | \w*\s* \.login]

[ [\.login] | [ [\w\s]*\.login] ]

Luego llegué a una versión más reducida

[\.login | ^\.login]

Y este mi ultimo intento razonando más aún si cabe!

Si esto es que no empiece con .login [^\.login]
Y esto es que puede tener estos caracteres 0 o más veces [#\s\w:-]*

[#\s\w:-]*\.login

Qué te parece la expresión y el resultado? Me aparece espacios o saltos de linea al comienzo de los arrays [0] => [1] => [2] =>

Código PHP:
preg_match_all('/[#\s\w:-]*\.login\s*[#\s\w:-]*\{[^\}]*\}/is',$css,$matches); 
Resultado
Código:
Array
(
    [0] => Array
        (
            [0] => 

.login #borde-top a:hover { color: #000; }
            [1] => 
.login form { background-color: #eee; }
            [2] => 

.login #nav a { color: #777777;
color: #777777;
color: #777777;
 }
            [3] => 
#myform form .login input:hover {
		background-color: #9ACBEF;
		border-color: #328AB2;
		color: #FFF; }
        )

)