Ver Mensaje Individual
  #12 (permalink)  
Antiguo 22/01/2010, 10:06
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 neodani Ver Mensaje
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!
SOLUCIONADO cambiando la expresión regular por

Código PHP:
Ver original
  1. preg_match_all("/[\.#\s\w:-]*\#login\s+[\.#\s\w:-]*\{[^\}]*\}/is",$css,$matches);

Sin embargo, hay otro fallo

Al seleccionar el estilo #user_pass no se de que forma seleccionarlo, sin que me deje de funcionar la funciones que tiene ahora.

Porque si hago una así, funciona para este caso pero no para #login

Código:
[\.#\s\w:-]*\#user_pass[,]\s+[\.#\s\w:-]*\{[^\}]*\}

Código CSS:
Ver original
  1. #login {
  2.     margin: 7em auto;
  3.     width: 350px; }
  4.  
  5. /* Tamaño de las casillas USER Y PASS */
  6. #user_pass, #user_login {
  7.     font-size: 20px;
  8.     margin-right: 6px;
  9.     padding: 3px;
  10.     width: 97%; }
  11.  
  12. /* Color texto input */
  13. #login form input { color: #555555; }
  14.  
  15. /* Color de fondo LOGIN (azul claro) */
  16. .login form { background-color: #eee; }

Muchas gracias de antemano!