Ver Mensaje Individual
  #11 (permalink)  
Antiguo 21/01/2010, 16:19
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

Buenas,

Tengo un problema con una expresión.

Si tienes el siguiente fragmento, y quieres sacar solo las propiedades que coincidan literalmente con #login


Código CSS:
Ver original
  1. #login form .submit input:hover {
  2. background-color: #9ACBEF;
  3. border-color: #328AB2;
  4. color: #FFF; }
  5.  
  6. h1 #prueba, h2 #login {border:0px;
  7. color:red;
  8. }
  9.  
  10. #login_error {
  11.     background-color: #FFEBE8;
  12.     border-color: #CC0000;
  13.     border-style: solid;
  14.     border-width: 1px;
  15.     margin: 0 0 13px 8px;
  16.     padding: 8px; }
  17.  
  18. #user_pass, #user_login {font-size: 20px;
  19.     margin-right: 6px;
  20.     padding: 3px;
  21.     width: 97%; }

Debería sacar la primera

#login form .submit input:hover {
background-color: #9ACBEF;
border-color: #328AB2;
color: #FFF; }

Y la segunda, incluso el h2 ya que pertenece a #login
h2 #login {border:0px;
color:red;
}

Las otras contienen la palabra #login pero no son válidas.

Cómo lo haríais?

Yo lo he intentado así, pero pilla el #login_error, no he conseguido decirle que no lo coja a pesar de tener la palabra #login. Tampoco el h2 he podido extraerlo sin perder el resto de la expresión regular.

Así me pilla el h2 pero solo ese.
Código PHP:
Ver original
  1. preg_match_all("/([\,\w]+[\s]*#login\s*[^\}]*\{[^}]*\})/is",$css,$matches);


Asi me coge el #login_error y no muestra el h2
Código PHP:
Ver original
  1. preg_match_all("/([\,\w]*#login\s*[^\}]*\{[^}]*\})/is",$css,$matches);

Código:
#login form .submit input:hover {
background-color: #9ACBEF;
border-color: #328AB2;
color: #FFF; }

#login {border:0px;
color:red;
}

#login_error {
	background-color: #FFEBE8;
	border-color: #CC0000;
	border-style: solid;
	border-width: 1px;
	margin: 0 0 13px 8px;
	padding: 8px; }
Muchas gracias de antemano!