Foros del Web » Programando para Internet » PHP »

Construyendo expresion regular

Estas en el tema de Construyendo expresion regular en el foro de PHP en Foros del Web. hola, tengo un codigo bastante grande del cual solo quiero sacar una aparicion que coincida con esto: $mivar="rt --><h1> lainfo</h1>"; la exprecion regular que invente ...
  #1 (permalink)  
Antiguo 23/10/2008, 12:34
Avatar de nes24  
Fecha de Ingreso: julio-2005
Mensajes: 746
Antigüedad: 18 años, 9 meses
Puntos: 3
Construyendo expresion regular

hola, tengo un codigo bastante grande del cual solo quiero sacar una aparicion que coincida con esto:

$mivar="rt --><h1>
lainfo</h1>";

la exprecion regular que invente fue ;


ereg("--><h1>.*(.*)</h1>",$mivar,$tit);
echo "-->".$tit[1];


pero no me matchea nada... como puedo hacerlo???
__________________
No hay nada que foros del web no sepa!!!!

Peca tanto quien presume de su belleza como de su inteligencia, ya que la brevedad de la vida aunque distorcionada siempre estara presente.
  #2 (permalink)  
Antiguo 23/10/2008, 15:26
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Construyendo expresion regular

Exactamente ¿qué coincidencias quieres encontrar? ¿El contenido de la variable? ¿La expresión completa de esas dos líneas (aunque con cadenas variables entre los tags <h1>?
  #3 (permalink)  
Antiguo 23/10/2008, 16:28
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Construyendo expresion regular

Hola de nuevo,

Si lo que quieres encontrar es lo que intuyo que es, quizás podría servirte este patrón PCRE (preg_match_all):

Código:
/(--><h1>)(\n|\r|\b)*(\w|\s)*(<\/h1>)/i
Lo he probado con este código:

Código PHP:
<?php
    $patron 
'/(--><h1>)(\n|\r|\b)*(\w|\s)*(<\/h1>)/i';
    
$cadena 'probando ...
    algo
    otra línea
    $mivar="rt --><h1>
lainfo</H1>"; asereje
    gromenauer
mereterita r="rt --><H1>
blob $mivar="rt --><h1> otra info </h1>"; asereje'
//Fin cadena

    
$total  preg_match_all$patron$cadena$result );
    echo 
"Se han encontrado {$total} coincidencias:<br />";
    foreach( 
$result[0] as $id => $elem 
        echo 
"[$id] => ".htmlentities$elem )."<br />";
?>
Y funciona con la cadena de ejemplo mostrando este resultado:

Código:
Se han encontrado 2 coincidencias:
[0] => --><h1>
lainfo</H1>
[1] => --><h1> otra info </h1>
Un saludo.
  #4 (permalink)  
Antiguo 23/10/2008, 16:56
Avatar de nes24  
Fecha de Ingreso: julio-2005
Mensajes: 746
Antigüedad: 18 años, 9 meses
Puntos: 3
Respuesta: Construyendo expresion regular

Cita:
Iniciado por Deschamps Ver Mensaje
Exactamente ¿qué coincidencias quieres encontrar? ¿El contenido de la variable? ¿La expresión completa de esas dos líneas (aunque con cadenas variables entre los tags <h1>?
grax,

solo quiero imprimir la info es decir todo lo que esta entre <h1> y </h1>

grax
__________________
No hay nada que foros del web no sepa!!!!

Peca tanto quien presume de su belleza como de su inteligencia, ya que la brevedad de la vida aunque distorcionada siempre estara presente.
  #5 (permalink)  
Antiguo 23/10/2008, 18:21
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Construyendo expresion regular

Cita:
Iniciado por nes24 Ver Mensaje
solo quiero imprimir la info es decir todo lo que esta entre <h1> y </h1>
Puedes echar un vistazo al manual sobre preg_match_all para "rescatar" las cadenas de texto guardadas en el array de resultados según sus grupos (los bloques de paréntesis definidos en la expresión regular).

Aunque si sólo deseas la primera ocurrencia y tienes bien identificada la cadena de búsqueda, no veo entonces qué necesidad hay de usar expresiones regulares. Sería mucho más rápido si empleas las funciones estándar para manejar strings. Por ejemplo algo de este estilo:

Código PHP:
<?php

    $mivar 
'lo que sea <h1>aquí el título</h1> y más cosas';

    
$cadena htmlentities$mivar );
    
$ini    strpos$cadena'h1' ) + 6;
    
$fin    strpos$cadena'h1'$ini ) - 5;
    
$result substr$cadena$ini$fin-$ini );

    echo 
$result;
?>
Con lo que obtendrías:

Código:
aquí el título
Un saludo.
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 08:22.