Comunidad de diseño web y desarrollo en internet online

Expresion regular con contenido

Citar            
MensajeEscrito el 11 Mar 2012 01:13 pm
Una vez más acá molestando con otro problema que tengo, el cual parte de:

escribió:

<tr class='row0'>
<td><a href='proxy:name=XROXY proxy&host=96.232.17.210&port=48989&isSocks=true&socksversion=4a&notes=United States&foxyProxyMode=this&confirmation=http://www.whatsmyip.org' title='Configure FoxyProxy in single click'>
<img src='http://www.exroxy.com/images/foxy16x16.gif' border='0' width='17' height='16' alt='Configure FoxyProxy in single click'/></a></td>
<td><a href='/proxy1913485.htm' title='View this Proxy details'>96.232.17.210
<!--
<img src='images/proxy/1913485.gif' border='0' hspace='0' vspace='0' width='140' height='14' alt='View this Proxy details'/>
-->
</a></td>
<td><a href='/proxy-48989---ssl.htm' title='Select proxies with port number 48989'>48989</a></td>
<td><a href='/proxy--Socks4--ssl.htm' title='Select proxies of Socks4 type'>Socks4</a></td>
<td><a href='/proxy----ssl.htm' title='Select proxies with/without SSL support'>true</a></td>
<td nowrap='nowrap'><a href='/proxy---US-ssl.htm' title="Select proxies from United States"><img border='0' width='14' height='14' src='http://www.exroxy.com/images/countries/ext_us.png' alt="Proxy from United States" /><small>&nbsp;United States</small></a></td>
<td>30</td>
<td>100</td>
<td><a href='/proxy1913485.htm' title='View detailed proxy information'>Details</a></td>
<!--
<td><a href='/whois1913485.htm' title='View proxy whois information'>Whois</a></td>
-->
</tr><br><br><br><br><br><tr class='row1'>
<td><a href='proxy:name=XROXY proxy&host=24.93.102.196&port=1877&isSocks=true&notes=United States&foxyProxyMode=this&confirmation=http://www.whatsmyip.org' title='Configure FoxyProxy in single click'>
<img src='http://www.exroxy.com/images/foxy16x16.gif' border='0' width='17' height='16' alt='Configure FoxyProxy in single click'/></a></td>
<td><a href='/proxy1911926.htm' title='View this Proxy details'>24.93.102.196
<!--
<img src='images/proxy/1911926.gif' border='0' hspace='0' vspace='0' width='140' height='14' alt='View this Proxy details'/>
-->
</a></td>
<td><a href='/proxy-1877---ssl.htm' title='Select proxies with port number 1877'>1877</a></td>
<td><a href='/proxy--Socks5--ssl.htm' title='Select proxies of Socks5 type'>Socks5</a></td>
<td><a href='/proxy----ssl.htm' title='Select proxies with/without SSL support'>true</a></td>
<td nowrap='nowrap'><a href='/proxy---US-ssl.htm' title="Select proxies from United States"><img border='0' width='14' height='14' src='http://www.exroxy.com/images/countries/ext_us.png' alt="Proxy from United States" /><small>&nbsp;United States</small></a></td>
<td>30</td>
<td>100</td>
<td><a href='/proxy1911926.htm' title='View detailed proxy information'>Details</a></td>
<!--
<td><a href='/whois1911926.htm' title='View proxy whois information'>Whois</a></td>
-->
</tr><br><br><br><br><br><tr class='row0'>
<td><a href='proxy:name=XROXY proxy&host=68.35.168.243&port=6585&isSocks=true&notes=United States&foxyProxyMode=this&confirmation=http://www.whatsmyip.org' title='Configure FoxyProxy in single click'>
<img src='http://www.exroxy.com/images/foxy16x16.gif' border='0' width='17' height='16' alt='Configure FoxyProxy in single click'/></a></td>
<td><a href='/proxy1916998.htm' title='View this Proxy details'>68.35.168.243
<!--
<img src='images/proxy/1916998.gif' border='0' hspace='0' vspace='0' width='140' height='14' alt='View this Proxy details'/>
-->
</a></td>
<td><a href='/proxy-6585---ssl.htm' title='Select proxies with port number 6585'>6585</a></td>
<td><a href='/proxy--Socks5--ssl.htm' title='Select proxies of Socks5 type'>Socks5</a></td>
<td><a href='/proxy----ssl.htm' title='Select proxies with/without SSL support'>true</a></td>
<td nowrap='nowrap'><a href='/proxy---US-ssl.htm' title="Select proxies from United States"><img border='0' width='14' height='14' src='http://www.exroxy.com/images/countries/ext_us.png' alt="Proxy from United States" /><small>&nbsp;United States</small></a></td>
<td>30</td>
<td>100</td>
<td><a href='/proxy1916998.htm' title='View detailed proxy information'>Details</a></td>
<!--
<td><a href='/whois1916998.htm' title='View proxy whois information'>Whois</a></td>
-->
</tr>


Para lo cual yo utilizo:

Código PHP :

<?php
$preg = @preg_match_all("/<tr class='row[(1|0){1}]'>(.*?)<\/tr>/is, $source, $data, PREG_SET_ORDER);
for($i=0; $i<count($data); $i++)
{
   print_r($data[$i][0]);
}
?>


Y me obtiene lo que está entre <tr> y </tr> correctamente, después intento pasar sobre lo que está entre cada <td> y </td> de la siguiente forma:

Código PHP :

<?php
$preg = @preg_match_all("/<tr class='row[(1|0){1}]'>(.*?)<\/tr>/is, $source, $data, PREG_SET_ORDER);
for($i=0; $i<count($data); $i++)
{
   //print_r($data[$i][0]);
   $pat2 = "/<td>(.*)<\/td>/";
   $preg = @preg_match_all($pat2, $data[$i][1], $conn, PREG_SET_ORDER);
   print_r($conn);
   echo '<br><br>';
}
?>


Y me regresa:

escribió:

Array ( [0] => Array ( [0] => 48989 [1] => 48989 ) [1] => Array ( [0] => Socks4 [1] => Socks4 ) [2] => Array ( [0] => true [1] => true ) [3] => Array ( [0] => 30 [1] => 30 ) [4] => Array ( [0] => 100 [1] => 100 ) [5] => Array ( [0] => Details [1] => Details ) [6] => Array ( [0] => Whois [1] => Whois ) )

Array ( [0] => Array ( [0] => 1877 [1] => 1877 ) [1] => Array ( [0] => Socks5 [1] => Socks5 ) [2] => Array ( [0] => true [1] => true ) [3] => Array ( [0] => 30 [1] => 30 ) [4] => Array ( [0] => 100 [1] => 100 ) [5] => Array ( [0] => Details [1] => Details ) [6] => Array ( [0] => Whois [1] => Whois ) )

Array ( [0] => Array ( [0] => 6585 [1] => 6585 ) [1] => Array ( [0] => Socks5 [1] => Socks5 ) [2] => Array ( [0] => true [1] => true ) [3] => Array ( [0] => 30 [1] => 30 ) [4] => Array ( [0] => 100 [1] => 100 ) [5] => Array ( [0] => Details [1] => Details ) [6] => Array ( [0] => Whois [1] => Whois ) )


Como pueden notar, las primeras dos <td></td> no me las detecta, no se si porque en el codigo fuente (el original) despues de la ultima <td></td> viene un comentario con <!-- --> (ver mas arriba o acontinuación):

escribió:

<td><a href='/proxy1913485.htm' title='View this Proxy details'>96.232.17.210
<!--
<img src='images/proxy/1913485.gif' border='0' hspace='0' vspace='0' width='140' height='14' alt='View this Proxy details'/>
-->
</a></td>


Entonces, supongo que ese comentario hace que el primer <td></td> y el segundo <td></td> no me los detecte.

Aunque estoy empleando /is que como me explicaron en este foro, es para caracteres "especiales" como saltos de línea e incesible a mayus y minus, por lo que no debería dar error porque el comentario está entre <td></td> y en el código fuente no me lo muestra.

Espero su ayuda, gracias.

Por kh0d3x

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Mar 2012 01:16 pm
Quiero añadir que la explicación que di del /is es incorrecta, es decir, si yo agrego /is me regresa esto:
Array ( [0] => Array ( [0] => 96.232.17.210 48989 Socks4 true United States 30 100 Details 48989 Socks4 true United States 30 100 Details 1877 Socks5 true United States 30 100 Details 1877 Socks5 true United States 30 100 Details 6585 Socks5 true United States 30 100 Details 6585 Socks5 true United States 30 100 Details


Y como se dan cuenta, es solo 1 ítem de array, cuando deberían ser 9 (count) segun el codigo original que agrege.

Por kh0d3x

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Mar 2012 01:41 pm
Cuando quieres obtener lo que está entre <td></td> la expresión regular debería ser:

Código :

/<td>(.*?)<\/td>/is

Y es correcta para lo que quieres.

Respecto a por qué parece que no te toma la parte que está entre <!-- -->, me gustaría que ejecutaras esto y luego visualizaras el código fuente resultante en tu navegador. Como supongo sabrás, en HTML, lo que está entre esas cadenas de caracteres es un comentario y por tanto el navegador lo ignora, ergo: aunque no lo ves en la salida, el contenido está ahí.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 11 Mar 2012 02:05 pm
Bueno. Acabo de ver que hay otro caso a considerar. La expresión regular que puse en mi mensaje anterior falla en este caso:

Código HTML :

<td nowrap='nowrap'><a href='/proxy---US-ssl.htm' title="Select proxies from United States"><img border='0' width='14' height='14' src='http://www.exroxy.com/images/countries/ext_us.png' alt="Proxy from United States" /><small>&nbsp;United States</small></a></td>

Porque el literal "<td>" no existe.

Afortunadamente es fácil de arreglar con esta expresión:

Código :

<td.*?>(.*?)<\/td>

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 11 Mar 2012 11:01 pm
Dios mío, vaya fallo el mío, pero intente algo parecido aunque también agregando un [( nowrap='nowrap')?] y otros y no me sale correctamente:

Array ( [0] => Array ( [0] => 1902 [1] => 1902 ) [1] => Array ( [0] => Socks5 [1] => Socks5 ) [2] => Array ( [0] => true [1] => true ) [3] => Array ( [0] => United States [1] => United States ) [4] => Array ( [0] => 30 [1] => 30 ) [5] => Array ( [0] => 100 [1] => 100 ) [6] => Array ( [0] => Details [1] => Details ) [7] => Array ( [0] => Whois [1] => Whois ) )

Array ( [0] => Array ( [0] => 8080 [1] => 8080 ) [1] => Array ( [0] => Transparent [1] => Transparent ) [2] => Array ( [0] => false [1] => false ) [3] => Array ( [0] => Malta [1] => Malta ) [4] => Array ( [0] => 810 [1] => 810 ) [5] => Array ( [0] => 99.32 [1] => 99.32 ) [6] => Array ( [0] => Details [1] => Details ) [7] => Array ( [0] => Whois [1] => Whois ) )

Array ( [0] => Array ( [0] => 808 [1] => 808 ) [1] => Array ( [0] => Anonymous [1] => Anonymous ) [2] => Array ( [0] => false [1] => false ) [3] => Array ( [0] => United States [1] => United States ) [4] => Array ( [0] => 653 [1] => 653 ) [5] => Array ( [0] => 99.32 [1] => 99.32 ) [6] => Array ( [0] => Details [1] => Details ) [7] => Array ( [0] => Whois [1] => Whois ) )


Ya no se que mas intentar, y gracias por seguir tratandome de ayudar.

Por kh0d3x

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Mar 2012 11:10 pm
Ya lo solucione con mi poca experiencia utilizando este patrón: "/<td[(.*>|>)?](.*?)<\/td>/is"

Solo quise poner que podría ser <td> o <td cualquiercosa> permitiendo saltos de linea (porque algunos tienen saltos de línea) e insensible a mayus/minus porque tu expresion regular no me funciono, si encuentras una mas resumida de la mia mejor.

Mil gracias de todas formas.

Por kh0d3x

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Mar 2012 11:14 pm
Detecte un fallo, me saca todo bien:
1: [image]
2: 173.81.137.101
3: 1902
4: Socks5
5: true
6: 30
7: 100
8: Details
9: Whois

Pero se come el que tiene noraw='nowrap', nada me cuesta hacer otra preg_match para sacar el enlace y de ahi el country pero quisiera ver si hay alguna otra forma de patron.

Por kh0d3x

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Mar 2012 11:20 pm
Lo cambie a "/<td[( nowrap='nowrap'>|>)?](.*?)<\/td>/s" y me regresa esto:
1: [image]
2: 173.81.137.101
3: 1902
4: Socks5
5: true
6: nowrap='nowrap'> United States
7: 30
8: 100
9: Details

No se si sirva como apoyo.

Por kh0d3x

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Mar 2012 03:43 am
Bueno, hice un par de str_replace y preg_replace y obtuve lo que necesitaba, igual me interesa saber.

Por kh0d3x

7 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.