Foros del Web » Programando para Internet » PHP »

Expresiones regulares

Estas en el tema de Expresiones regulares en el foro de PHP en Foros del Web. Hola amig@s, tengo el siguiente problema en la siguiente direccion: http://www.malwareurl.com/listing.php?domain=bbssifu.cn , en la parte que hay el codigo: Código PHP: < tr >< td colspan ...
  #1 (permalink)  
Antiguo 15/07/2009, 08:40
 
Fecha de Ingreso: enero-2009
Ubicación: en la casa
Mensajes: 223
Antigüedad: 17 años, 8 meses
Puntos: 3
Expresiones regulares

Hola amig@s, tengo el siguiente problema en la siguiente direccion: http://www.malwareurl.com/listing.php?domain=bbssifu.cn, en la parte que hay el codigo:
Código PHP:
<tr><td colspan="5" class="table_bg"  height="20" >Malicious URLs on <b>bbssifu.cn</b></td>
</
tr><tr><td style="padding:10px;"><pre>/01.htm
/123.htm
/a.exe</pre></td></tr> 
tengo que hacer que recoja el dominio de la URL: bbssifu.cn y combinar con el final de la URL que en este caso seria bbssifu.cn/01.htm bbssifu.cn/123.htm bbssifu.cn/a.exe, para eso cree el siguiente codigo:
Código PHP:
$str = trim($text);        
$str = preg_replace("/\s\s+/", ' ', $str);
$regExp1="/([^ ]+\.[a-zA-Z]{1,4}[$ ]*)/";
preg_match_all($regExp1, $str, $patron1);
$regExp2="/(\/[^ ]*)/";
preg_match_all($regExp2, $str, $patron2);
$count1 = count($patron2[1]);
for (
$row1 = 0; $row1 < $count1 ; $row1++) {
    
$string = trim($patron1[1][0]).trim($patron2[1][$row1]);
    
$string = ereg_replace(" ", "", $string);
    
$h = trim("http://".$string);
    echo 
$h."<br>";
} 
pero lo que consigo solo es lo siguiente: bbssifu.cn/01.htm /123.htm /a.exe y no se como correjir este error, no se si el problema es de la expresion regula o de alguna otra cosa, alguien que me ayude
  #2 (permalink)  
Antiguo 15/07/2009, 09:02
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 17 años, 4 meses
Puntos: 1517
Respuesta: Expresiones regulares

Y si en vez de estar llamando trim($patron1[1][0]) en el for, creas una variable antes del for y le indicas que lo que quieres tener es lo que indicaste?

Código PHP:
$home = trim($patron1[1][0]);
for (
$row1 = 0; $row1 < $count1 ; $row1++) { 
    
$string = $home.trim($patron2[1][$row1]); 
    
$string = ereg_replace(" ", "", $string); 
    
$h = trim("http://".$string); 
    echo 
$h."<br>"; 
} 
  #3 (permalink)  
Antiguo 15/07/2009, 09:09
 
Fecha de Ingreso: enero-2009
Ubicación: en la casa
Mensajes: 223
Antigüedad: 17 años, 8 meses
Puntos: 3
Respuesta: Expresiones regulares

diferencia no hay, el problema que yo creo que hay es que esto /01.htm /123.htm /a.exe lo esta tomando como una sola palabra, como podria hacer para que reconosca los espacios que hay en esta palabra y que por cada espacio coloque el dominio? y otra cosa que me di cuenta es que no son espacios, sino saltos de linia, segun veo el codigo html, como podria hacer para que resonosca el salto de linea?
  #4 (permalink)  
Antiguo 15/07/2009, 09:38
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 17 años, 4 meses
Puntos: 1517
Respuesta: Expresiones regulares

podrias dar un

echo "<pre>";
print_r($patron2);
echo "</pre>";

Para poder ver que hay en el array
  #5 (permalink)  
Antiguo 15/07/2009, 10:02
 
Fecha de Ingreso: enero-2009
Ubicación: en la casa
Mensajes: 223
Antigüedad: 17 años, 8 meses
Puntos: 3
Respuesta: Expresiones regulares

Estoy tratando de guardar el contenido en un documento de texto y me sale esto: /01.htm/123.htm/a.exe, sin espacios con lo que me pediste que ponga me salio asi:
/01.htm
/123.htm
/a.exe, de forma escalonada
  #6 (permalink)  
Antiguo 15/07/2009, 10:14
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 17 años, 4 meses
Puntos: 1517
Respuesta: Expresiones regulares

Podrias indicar que hay en el $text es para poder verificar entonces bien el codigo. Si es posible escribe todo el ejemplo para poder ayudarte
  #7 (permalink)  
Antiguo 15/07/2009, 15:23
 
Fecha de Ingreso: enero-2009
Ubicación: en la casa
Mensajes: 223
Antigüedad: 17 años, 8 meses
Puntos: 3
Respuesta: Expresiones regulares

el $text lo que contiene es este codigo filtrado de la pagina que puse al inicio:
Código PHP:
<tr><td colspan="5" class="table_bg"  height="20" >Malicious URLs on <b>bbssifu.cn</b> </td> 
</
tr><tr><td style="padding:10px;"><pre>/01.htm 
/123.htm 
/a.exe</pre></td></tr 
con la primera ExRegular, lo que hice fue sacar los dominios (serian las palabras terminadas en punto (.) y de 1 a 4 palagras, por ejemplo xxxxxxx.xxx y con la segunda extraigo lo que se encuentra entre <pre> y </pre> y esta las toma por palabras que inician con el simbolo / no se si me entiendas esta parte ya que es confuso explicarlo, pero bueno el codigo el contenido de $text es el codigo html que esta al inicio, aparte uso filtros para limpiar el texto, pero bueno el codigo es este
Código PHP:
$url1  = @file_get_contents('http://........');
$text = ereg_replace("</b>", " ", $url1);
$text = ereg_replace("<b>", " ", $text);
$str = trim($text);        
$str = preg_replace("/\s\s+/", ' ', $str);
$regExp1="/([^ ]+\.[a-zA-Z]{1,4}[$ ]*)/";
preg_match_all($regExp1, $str, $patron1);
$regExp2="/(\/[^ ]*)/";
preg_match_all($regExp2, $str, $patron2);
$count1 = count($patron2[1]);
for (
$row1 = 0; $row1 < $count1 ; $row1++) {
    
$string = trim($patron1[1][0]).trim($patron2[1][$row1]);
    
$string = ereg_replace(" ", "", $string);
    
$h = trim("http://".$string);
    echo 
$h."<br>";
} 
  #8 (permalink)  
Antiguo 15/07/2009, 15:35
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 17 años, 4 meses
Puntos: 1517
Respuesta: Expresiones regulares

Verifica si esto te resuelve

Código PHP:
$text = '<tr><td colspan="5" class="table_bg"  height="20" >Malicious URLs on <b>bbssifu.cn</b> </td> 
</tr><tr><td style="padding:10px;"><pre>/01.htm 
/123.htm 
/a.exe</pre></td></tr>'
;

$text = strip_tags($text);

preg_match("|\w*\.\w{2,6}|", $text, $url);
preg_match_all("|/\w*\.\w{2,6}|",$text,$web);

for(
$i=0; $i<count($web[0]); $i++){
    
$string = $url[0].$web[0][$i];
    
$h = trim("http://".$string);
    echo 
$h."<br />";
} 
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 14:33.