Foros del Web » Programando para Internet » PHP »

Parsear hoja de estilo con expresiones regulares

Estas en el tema de Parsear hoja de estilo con expresiones regulares en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 18/01/2010, 13:31
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
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!
  #2 (permalink)  
Antiguo 18/01/2010, 13:41
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Parsear hoja de estilo con expresiones regulares

Intentando...

Todo lo que empiece por .login
Seguido por cualquier cosa
seguido de una llave abierta {
Cualquier cosa
Acabe con una llave }

Código PHP:
preg_match_all('/(\.login)(.*?)\{(.*?)}*$/is',$css,$matches); 
Resultado:

Código:
<pre>Array
(
    [0] => Array
        (
            [0] => .login #borde-top a:hover { color: #000; }

/* TITULO PRINCIPAL (LOGO)
------------------------------------------------- */
h1 {
	background: url(../imagenes/header/logo-acceso-panel.png) no-repeat;
	display: block;
	height: 40px;
	margin-left: 15px;
	overflow: hidden;
	padding-bottom: 15px;
	text-indent: -9999px;
	width: 320px; }

/* FORMULARIO
------------------------------------------------- */
form {
	-khtml-border-radius: 5px;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	border-radius: 5px;
	font-weight: bold;
	margin-left: 8px;
	padding: 16px 16px 40px 16px; }

	form p { margin-bottom: 24px; }

/* Tamaño del recuadro */
#login {
	margin: 7em auto;
	width: 350px; }

/* Tamaño de las casillas USER Y PASS */
#user_pass, #user_login {
	font-size: 20px;
	margin-right: 6px;
	padding: 3px;
	width: 97%; }

/* Color texto input */
#login form input { color: #555555; }

/* Color de fondo LOGIN (azul claro) */
.login form { background-color: #eee; }

/* CASILLA >> RECORDARME
------------------------------------------------- */
form .forgetmenot {
	float: left;
	font-weight: normal;
	margin-bottom: 0;
	margin-left: 2px; }

/* BOTON >> INICIAR SESIÓN
------------------------------------------------- */
#login form .submit input {
	-khtml-border-radius: 3px;
	-moz-border-radius: 3px;
	-webkit-border-radius: 3px;
	background-color: #CEE1EF;
	border-color: #80B5D0;
	border-radius: 3px;
	border-style: solid;
	border-width: 1px;
	border: none;
	color: #224466;
	cursor: pointer;
	float: right;
	font-family: "Lucida Grande", "Lucida Sans Unicode", Tahoma, Verdana, sans-serif;
	font-size: 13px;
	margin-top: -6px;
	padding: 3px 5px;
	text-decoration: none; }

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

/* FOOTER FORMULARIO
------------------------------------------------- */
#nav {
	margin: 0 0 0 8px;
	padding: 16px;
	text-align: center; }

.login #nav a { color: #777777; }

/* MENSAJES DE ERROR (FORMULARIO)
------------------------------------------------- */
#login_error {
	background-color: #FFEBE8;
	border-color: #CC0000;
	border-style: solid;
	border-width: 1px;
	margin: 0 0 13px 8px;
	padding: 8px; }

        )

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

    [2] => Array
        (
            [0] =>  #borde-top a:hover 
        )

    [3] => Array
        (
            [0] =>  color: #000; }

/* TITULO PRINCIPAL (LOGO)
------------------------------------------------- */
h1 {
	background: url(../imagenes/header/logo-acceso-panel.png) no-repeat;
	display: block;
	height: 40px;
	margin-left: 15px;
	overflow: hidden;
	padding-bottom: 15px;
	text-indent: -9999px;
	width: 320px; }

/* FORMULARIO
------------------------------------------------- */
form {
	-khtml-border-radius: 5px;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	border-radius: 5px;
	font-weight: bold;
	margin-left: 8px;
	padding: 16px 16px 40px 16px; }

	form p { margin-bottom: 24px; }

/* Tamaño del recuadro */
#login {
	margin: 7em auto;
	width: 350px; }

/* Tamaño de las casillas USER Y PASS */
#user_pass, #user_login {
	font-size: 20px;
	margin-right: 6px;
	padding: 3px;
	width: 97%; }

/* Color texto input */
#login form input { color: #555555; }

/* Color de fondo LOGIN (azul claro) */
.login form { background-color: #eee; }

/* CASILLA >> RECORDARME
------------------------------------------------- */
form .forgetmenot {
	float: left;
	font-weight: normal;
	margin-bottom: 0;
	margin-left: 2px; }

/* BOTON >> INICIAR SESIÓN
------------------------------------------------- */
#login form .submit input {
	-khtml-border-radius: 3px;
	-moz-border-radius: 3px;
	-webkit-border-radius: 3px;
	background-color: #CEE1EF;
	border-color: #80B5D0;
	border-radius: 3px;
	border-style: solid;
	border-width: 1px;
	border: none;
	color: #224466;
	cursor: pointer;
	float: right;
	font-family: "Lucida Grande", "Lucida Sans Unicode", Tahoma, Verdana, sans-serif;
	font-size: 13px;
	margin-top: -6px;
	padding: 3px 5px;
	text-decoration: none; }

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

/* FOOTER FORMULARIO
------------------------------------------------- */
#nav {
	margin: 0 0 0 8px;
	padding: 16px;
	text-align: center; }

.login #nav a { color: #777777; }

/* MENSAJES DE ERROR (FORMULARIO)
------------------------------------------------- */
#login_error {
	background-color: #FFEBE8;
	border-color: #CC0000;
	border-style: solid;
	border-width: 1px;
	margin: 0 0 13px 8px;
	padding: 8px; }

        )

)
</pre>
Qué es lo que hago mal?
  #3 (permalink)  
Antiguo 18/01/2010, 13:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Parsear hoja de estilo con expresiones regulares

es que usas expresiones muy endebles... debes reflexionar mas lo que necesitas, y entonces aplicar tu criterio...

Cita:
.login #borde-top a:hover{color:#000;}
.login form{background-color:#eee;}
.login #nav a { color: #777777; }
si dices que mas-o-menos es así la estructura deberías ser un poco así la expresión:
Cita:
/\.login\s*\{[^\}]+\}/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 18/01/2010, 14:22
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Parsear hoja de estilo con expresiones regulares

Cita:
Iniciado por pateketrueke Ver Mensaje
es que usas expresiones muy endebles... debes reflexionar mas lo que necesitas, y entonces aplicar tu criterio...



si dices que mas-o-menos es así la estructura deberías ser un poco así la expresión:
Gracias de nuevo por tus comentarios pateketrueke!!

Si la aplico con o sin poner /is no me da ningun resultado.

Analizando tu expresion me aventuro a decir que hace lo siguiente, corrígeme si me equivoco por favor :)

Todo lo que empiece por .login
seguido por 0 ó mas espacios
una llave abierta {
que no contenga }
seguido de 1 o más llaves cerradas }

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

)
</pre>
Gracias de antemano!
  #5 (permalink)  
Antiguo 18/01/2010, 14:35
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Parsear hoja de estilo con expresiones regulares

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); 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 18/01/2010, 16:10
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
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; }
        )

)
  #7 (permalink)  
Antiguo 18/01/2010, 16:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Parsear hoja de estilo con expresiones regulares

las corchetes cuadrados... [] descomponen las frases dentro de ellos en sus componentes, osea... en sus caracteres

por ende, si colocas una frase completa ahí no funcionará como piensas... es por ello, que no se usan para agrupar patrones, se utilizan para descomponer una frase en opciones...

por eso [0-9] es algún numero del cero al nueve... pero [foo] no quiere decir que captura "foo", mas bien capturaría todo lo que contenga alguna de dichas letras...

igualmente, la negación se hace a nivel carácter... no por frases, osea pensar que [^\.login] niega toda la frase es un error...


--
lo de tu expresión, es natural... ya que los caracteres especiales dentro de los corchetes [#\s\w:-] hay un espacio, y por lógica... lo captura (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 19/01/2010, 00:52
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Parsear hoja de estilo con expresiones regulares

Cita:
Iniciado por pateketrueke Ver Mensaje
las corchetes cuadrados... [] descomponen las frases dentro de ellos en sus componentes, osea... en sus caracteres

por ende, si colocas una frase completa ahí no funcionará como piensas... es por ello, que no se usan para agrupar patrones, se utilizan para descomponer una frase en opciones...

por eso [0-9] es algún numero del cero al nueve... pero [foo] no quiere decir que captura "foo", mas bien capturaría todo lo que contenga alguna de dichas letras...

igualmente, la negación se hace a nivel carácter... no por frases, osea pensar que [^\.login] niega toda la frase es un error...


--
lo de tu expresión, es natural... ya que los caracteres especiales dentro de los corchetes [#\s\w:-] hay un espacio, y por lógica... lo captura (:
Ajam, para negar frases o palabras se utilizaría algo así, sino estoy equivocado

(?!\.login)

Salu2!
  #9 (permalink)  
Antiguo 19/01/2010, 05:51
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Parsear hoja de estilo con expresiones regulares

con eso le dices que no lo siga una expresion.. ejemplo

foo(?!bar) coincide con todos los foo que no terminen con bar
si quieres que no encuentre una palabra seria
([^foo]) asi coincide con todo lo que no sea foo

saludos!
__________________
More about me...
~ @rhyudek1
~ Github
  #10 (permalink)  
Antiguo 19/01/2010, 11:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Parsear hoja de estilo con expresiones regulares

Cita:
Iniciado por Hidek1 Ver Mensaje
[...] ([^foo]) asi coincide con todo lo que no sea foo [...]
por favor, lee por favor lo que puse anteriormente...

los [] no niegan frases, descomponen la frase en caracteres y niegan individualmente su composición...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 21/01/2010, 16:19
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
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!
  #12 (permalink)  
Antiguo 22/01/2010, 10:06
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
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&#37;; }

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!

Etiquetas: estilo, expresiones, hoja, regulares, parse
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:55.