Foros del Web » Programando para Internet » PHP »

RegExp - Extraccion desde un patrón

Estas en el tema de RegExp - Extraccion desde un patrón en el foro de PHP en Foros del Web. Hola: Llevo 3 días tratando de encontrar la solución a un problema (incluido en este foro :) sobre expresiones regulares. Me explico a continuación: tengo ...
  #1 (permalink)  
Antiguo 26/09/2005, 10:38
 
Fecha de Ingreso: mayo-2002
Ubicación: En MVD
Mensajes: 34
Antigüedad: 15 años, 7 meses
Puntos: 0
Pregunta RegExp - Extraccion desde un patrón

Hola:
Llevo 3 días tratando de encontrar la solución a un problema (incluido en este foro :) sobre expresiones regulares.
Me explico a continuación:
tengo el siguiente texto html que necesito regularizar:

Código:
<img class="mi_clase" width="20" height="20" value="id:5"/>
Lo seguro es que:
1.-el tag es de la clase "mi_clase" y siempre está enseguida del nombre del tag
2.-tengo un value="id:[digito]" antes de cerrar el tag con "/>"
3.-En el medio puede haber cualquier otro atributo del tag.

Necesito extraer el valor de id (en este caso 5) y reemplazar la cadena entera (<img..... />) con el mismo.
ej:

Código:
<img class="mi_clase" width="20" height="20" value="id:5"/>
<p>Un parrafo por aqui</p>
<img class="mi_clase" width="20" height="20" value="id:6"/>
<p>Otro parrafo por aqui</p>
Y el resultado que quiero obtener es el siguiente:

Código:
5
<p>Un parrafo por aqui</p>
6
<p>Otro parrafo por aqui</p>
Se que tengo que usar backreferences para tomar el 5 y 6 respectivamente, pero he intentado y lo maximo que he podido hacer es tomar todo el tag (<img ... />) con el siguiente codigo php:

Código PHP:
$pat ='<img class="mi_clase[^>]+(id:([[:digit:]]))*>';
$rep ="[]";
//$this->content tiene el html con varias repeticiones del tag <img class="mi_clase"..../>
$this->content=eregi_replace($pat,$rep,$this->content); 

Les agradecería que me pudiesen hechar un cable con el asunto.
Un sld.
Alejandro,.-
  #2 (permalink)  
Antiguo 26/09/2005, 17:45
 
Fecha de Ingreso: julio-2005
Mensajes: 13
Antigüedad: 12 años, 5 meses
Puntos: 0
Según lo que dijiste, hice esta expresión regular:

Código PHP:
$patron "@\<img class=\"mi_clase\"[\w=\"\s]*value=\"id:(\d+)\"[\s*]?\/\>@i"
Aquí tienes un ejemplo de lo que deseas hacer utilizando la función preg_replace():

Código PHP:
$texto = <<<FIN
<img class="mi_clase" width="20" height="20" value="id:5"/>
<p>Un parrafo por aqui</p>
<img class="mi_clase" width="20" height="20" value="id:6"/>
<p>Otro parrafo por aqui</p>
<IMG class="mi_clase" width="20"height="20" value="id:7"/>
FIN;

$patron "@\<img class=\"mi_clase\"[\w=\"\s]*value=\"id:(\d+)\"[\s*]?\/\>@i";

print 
preg_replace($patron,'\1'$texto); 
espero haberte ayudado..

Saludos
  #3 (permalink)  
Antiguo 26/09/2005, 17:56
 
Fecha de Ingreso: mayo-2002
Ubicación: En MVD
Mensajes: 34
Antigüedad: 15 años, 7 meses
Puntos: 0
De acuerdo

Pues.... efectivamente, me has ayudado!!!

Te agradezco mucho la molestia que te tomaste en haber posteado, mi problema ya tiene solución.
Un cordial saludo
Alejandro.-
  #4 (permalink)  
Antiguo 26/09/2005, 18:00
 
Fecha de Ingreso: mayo-2002
Ubicación: En MVD
Mensajes: 34
Antigüedad: 15 años, 7 meses
Puntos: 0
Información

Revolviendo en otro foro hispano (http://php-hispano.net/foros/PHP/10225) me han enviado una expresión un poco más simple (que de hecho también soluciona).
La posteo aquí a modo de referencia:

Código PHP:
$cadena preg_replace('/<img class="mi_clase[^>]+id:([0-9]+)"\/>/is','\1',$cadena); 
Saludos
A.-
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 13:50.