Página 1 de 1

Problema al sacar resultados con StringRegExp

Publicado: 28 Sep 2012, 10:25
por arkcrew
Hola a todos,

En primer lugar decir que esta maldita función siempre me trae por el camino de la amargura y rara vez consigo hacer que un código me funcione de primeras cuando utilizo la función, deprimente jajajaja.

Bueno tengo este código html:

Código: Seleccionar todo

  <tr>
		   <td class="space" width="20"> </td>
           <td class="data_table_data" align="center">
             
                 18:e7:f4:51:10:a4
             
           </td>
           <td class="data_table_data" align="center">
            
              192.168.1.38
            
           </td>
           <td class="data_table_data" align="center">
            
              0:10:24:24
            
           </td>
           <td class="data_table_data" align="center">
            
              Gm15
            
           </td>
           <td class="data_table_data" align="center">
		    
		   </td>
		   <td class="space" width="20"> </td>
         </tr>
        
         <tr>
		   <td class="space" width="20"> </td>
           <td class="data_table_data" align="center">
             
                 00:22:f7:2a:5e:79
             
           </td>
           <td class="data_table_data" align="center">
            
              192.168.1.33
            
           </td>
           <td class="data_table_data" align="center">
            
              0:11:20:49
            
           </td>
           <td class="data_table_data" align="center">
            
              Alberto-PC
            
           </td>
           <td class="data_table_data" align="center">
		    
		   </td>
		   <td class="space" width="20"> </td>
         </tr>
De ahí la idea es leer la MAC la IP y el nombre del PC que están aqui <td class="data_table_data" align="center">

Hago esto:

Código: Seleccionar todo

#include <INet.au3>

$source = _INetGetSource("http://1234:[email protected]/webconfig/status/dhcp_table.html")
$leer = StringRegExp($source, '<td class="data_table_data" align="center">(.*?)</td>', 3)
For $a = 0 to UBound($source)-1
	MsgBox(0,"",$leer[$a])
next
Pero no me devuelve nada..

Echadme una mano porfa :D

Saludos!

PD: es mi router, que quiero controlar por el DCHP quien se conecta.

Re: Problema al sacar resultados con StringRegExp

Publicado: 28 Sep 2012, 13:20
por juantxo
Me alegra un monton no ser el unico al que StringRegExp le trae por la calle de la amargura!!

Cada vez que tengo que hacer algo con ella... En fin.

Casualmente hoy me he estado pegando con algo parecido a lo que intentas hacer, y creo que deberias modificar la expresion por la siguiente:
StringRegExp($source, '(?s)<td class="data_table_data" align="center">(.*?)</td>', 3)

De esta forma le indicas que no tenga en cuenta los saltos de linea, que es lo que puede estar fallando.

Ya nos diras si era eso... :smt041

Re: Problema al sacar resultados con StringRegExp

Publicado: 28 Sep 2012, 14:12
por arkcrew
Gracias por responder,

Pensé que quizás podían ser los saltos de línea, el caso es que aún poniéndolo para que los tenga en cuenta, tal cual indicas, pues sigue sin funcionar.. maldita sea, que depresión de función AJAJJAJAJAJA

Saludos!

Re: Problema al sacar resultados con StringRegExp

Publicado: 28 Sep 2012, 16:29
por Chefito
Yo también tuve ese problema (salto de líneas y retornos de carro), y buscando buscando todo se encuentra.
Si no recuerdo mal sería así:

Código: Seleccionar todo

$leer = StringRegExp($source, '<td class="data_table_data" align="center">([\w|\W]*)</td>', 3)
Saludos.

Re: Problema al sacar resultados con StringRegExp

Publicado: 28 Sep 2012, 18:45
por arkcrew
No furula -.-"

#include <INet.au3>

Código: Seleccionar todo

$source = _INetGetSource("http://1234:[email protected]/webconfig/status/dhcp_table.html")
$leer = StringRegExp($source, '<td class="data_table_data" align="center">([\w|\W]*)</td>', 3)
For $a = 0 To UBound($source) - 1
	MsgBox(0, "", $leer[$a])
Next
El código html se devuelve a la perfección, el problema está en la función StringRegExp..
Saludos!

EDITO:

Estoy atontado, fijaos en esto For $a = 0 To UBound($source) - 1, puse eso en vez de $leer.. ya va perfecto..
Saludos!

Re: Problema al sacar resultados con StringRegExp

Publicado: 10 Dic 2012, 00:04
por jamaro
Hola chic@s:

Sigo en este hilo, para no crear uno nuevo de StringRegExp, a ver si me echáis una mano.

Tengo unos textos en los que a veces está cada línea de datos en una línea, propiamente dicho:

Código: Seleccionar todo

~T|01.04.03.3|Eliminación de los maceteros metálicos en los balcones.|
~T|ANEXO.01|Ejecución de trasteros en cubierta.|
~M|02.05#\02.05.03|2\5\3\|1|\Partida alzada\1\\\\|
~M|02.05#\02.05.04|2\5\4\|2|\Cuartos ascensor\2\\\\|
~M|02.05#\02.05.05|2\5\5\|65|\Conducto principal\\\\\\   Horizonal\1\25\\\\\1\28\\\\   Vertical\4\3\\\|
~M|02.05#\02.05.06|2\5\6\|12|\Bajantes\12\\\\|
pero en otras ocasiones está con saltos de línea:

Código: Seleccionar todo

\YCM030\\13.460
\YCR010a\\140.000
\YCR010\\140.000
\YCR030\\280.000
\|
~M|YC\YCB010a|13\1\1\|560.000|
   \\1\280.00\\\
   \\1\280.00\\\
|
~M|YC\YCB010b|13\1\2\|123.300|
   \\10\12.33\\\
|
~M|YC\YCB010|13\1\3\|31.580|
   \Huecos en fachada\1\31.58\\\
   \\10\12.33\\\
|
Pretendo obtener, con StringRegExp cada una de las líneas que empiezan por ~M, con el patrón "(~M.*)" pero cuando el texto está como en el segundo ejemplo, no consigo obtenerlo. He probado con (?s) pero tampoco me funciona... ¿alguna idea?

Después ya utilizo StringSplit para separar los datos que hay entre "|", y en su caso, también lo usaré para los datos separados por "\", pero de momento, como digo, necesito sacar cada una de las líneas con ~M

Saludos

Re: Problema al sacar resultados con StringRegExp

Publicado: 10 Dic 2012, 13:55
por Ximorro
Por defecto el comodín punto (cualquier carácter) NO casa con retornos de línea, para que lo haga hay que activar el flag (?s) al principio de la ER.
Por ejemplo "(?s)(~M[^~]*)" tomará el que empiece por ~M y tomará todo (retornos de carro incluido) hasta el siguiente ~ (exclusive)
Por supuesto los retornos de carro formarán parte del resultado, básicamente ?s lo que hace es tomarlos como caracteres normales.

Si pones "(?s)(~M.*)" fíjate que al no finalizar las cadenas en el retorno en cuanto te encuentre un ~M te tomará desde ahí hasta el final pues .* casará con absolutamente todo, por eso tienes que decirle dónde acaba la subcadena que quieres, como hago arriba. Si dentro de la subcadena a buscar puede haber ~, pues... buena suerte ;-)

Re: Problema al sacar resultados con StringRegExp

Publicado: 10 Dic 2012, 22:52
por jamaro
Muchas gracias Ximorro (Mr. Expresiones Regulares).

Con esta explicación y sustituyendo retornos como comenta también Basicos, por otro medio, espero obtener los datos como deseo.

Gracias por vuestra ayuda.