Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: viher en 26 Octubre 2010, 21:22 pm



Título: ayudita expresion regular
Publicado por: viher en 26 Octubre 2010, 21:22 pm
hola,tengo la siguiente expresión regular que sirve para coger urls y funciona perfectamente,pero necesitaria que me buscara urls que acabaran en .swf

aqui os dejo la expresión que tengo

Código:
 Dim Expresion As String
   
    ' Expresión regular
    Expresion = "(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)" _
             & "?(\/|\/([\w#!:.?+=&%@!\-\/]))?" & Chr(34)

cómo podría añadir para que me busque .swf??

gracias por la ayuda


Título: Re: ayudita expresion regular
Publicado por: raul338 en 26 Octubre 2010, 21:33 pm
Código:
(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?\*.swf

Deberia ir en Programacion general esto :P


Título: Re: ayudita expresion regular
Publicado por: viher en 26 Octubre 2010, 21:58 pm
Código:
(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?\*.swf

Deberia ir en Programacion general esto :P

no me extrae la url con esa expresion  :huh:


Título: Re: ayudita expresion regular
Publicado por: Psyke1 en 26 Octubre 2010, 22:11 pm
También podrias usar esta, aunque no incluye validación:
Código:
(https?|ftp):\/\/(\S)+.swf

Código
  1. http://foro.elhacker.net/programacion_visual_basic/ayudita_expresion_regular-t308911.0.html 'False
  2.  
  3. http://foro.elhacker.net/programacion_visual_basic/ayudita_expresion_regular-t308911.0.swf 'True

DoEvents! :P


Título: Re: ayudita expresion regular
Publicado por: raul338 en 26 Octubre 2010, 22:19 pm
Código:
^(?:(?>ht|f)tps?://)?(?:\w+[.-]\w+)+(?::\d+)?(?:\/[\w\-\.\?\,\'+&%\$_]*\.swf)*(?:\??(?:[\w\-\._]+=[\w\-\.\?\,\\'\/+%\$_]*&?)*)?(?:\#[\w]+)?$

Ahi esta mi expreg perfecta para swf :)


Título: Re: ayudita expresion regular
Publicado por: Psyke1 en 26 Octubre 2010, 22:22 pm
Ook raul, tu ganas!! :laugh: :laugh: :laugh: :laugh:
Muy bueno.

DoEvents! :P


Título: Re: ayudita expresion regular
Publicado por: viher en 27 Octubre 2010, 16:38 pm
También podrias usar esta, aunque no incluye validación:
Código:
(https?|ftp):\/\/(\S)+.swf

Código
  1. http://foro.elhacker.net/programacion_visual_basic/ayudita_expresion_regular-t308911.0.html 'False
  2.  
  3. http://foro.elhacker.net/programacion_visual_basic/ayudita_expresion_regular-t308911.0.swf 'True

DoEvents! :P

me sirvió tu expresión a la perfección. gracias  ;-)


Título: Re: ayudita expresion regular
Publicado por: Psyke1 en 28 Octubre 2010, 00:15 am
Oops! una pequeña corrección, mi RegExp seria asi:
Código:
(https?|ftp):\/\/(\S)+\.swf

No me funciona la tuya raul... :-(

DoEvents! :P


Título: Re: ayudita expresion regular
Publicado por: viher en 28 Octubre 2010, 19:09 pm
el problema que me surge ahora es que intento sacar la url desde un texto que tengo en el text2.text,pero no consigo sacarla,aqui va el source:

Código
  1. 'Sub que extrae las direccións url : Http, Ftp y Https _
  2.  de un archivo utilizando una expresión regular
  3. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  4.  
  5. Sub Extraer_Url(url_Path As String, Expresion As String)
  6.    'Variables para usar RegExp
  7.    Dim o_RegExp As RegExp
  8.    Dim o_Match As Match
  9.    Dim o_Matches As MatchCollection
  10.   'Variables Fso para abrir y leer el archivo en la variable contenido
  11.   Dim Contenido As String
  12.   'Lee el contenido del fichero y lo almacena en la var
  13.   Contenido = Text2.Text
  14.   'crea nuevo objeto RegExp
  15.   Set o_RegExp = New RegExp
  16.   ' Para que no distinga mayúsculas de minúsculas
  17.   o_RegExp.IgnoreCase = True
  18.   o_RegExp.Global = True
  19.   ' A la propiedad Pattern se le pasa la Expresión regular
  20.   o_RegExp.Pattern = Expresion
  21.   'Ejecuta y busca
  22.   Set o_Matches = o_RegExp.Execute(Contenido)
  23.   ' Recorre en la colección
  24.   For Each o_Match In o_Matches
  25.      'Agrega las url al control List
  26.      List1.AddItem Replace(o_Match.Value, Chr(34), vbNullString)
  27.   Next
  28.  
  29. End Sub
  30.  
  31. Private Sub Command1_Click()
  32.    Dim Expresion As String
  33.    ' Expresión regular
  34.    Expresion = "(ftp|http|https):\/\/(\S)+.swf" & Chr(34)
  35.        Call Extraer_Url(Text2.Text, Expresion)
  36.    Text1.Text = List1.List(0)
  37.    List1.Clear
  38. End Sub
  39.  
  40. Private Sub Command2_Click()
  41. Text2.Text = WebBrowser1.Document.documentElement.innerHTML
  42. End Sub
  43.  
  44. Private Sub Form_Load()
  45. WebBrowser1.Navigate ("http://www.web.com/")
  46.    Me.Caption = " Ejemplo que utiliza expresiones regulares" _
  47.                 & " Para extraer los enlaces de un archivo"
  48.  
  49.    Command1.Caption = " Abrir archivo y Extraer "
  50. End Sub
  51.  

y aqui el original que lo hace através de un common dialog y archivos (este funciona perfectamente)

Código
  1. 'Sub que extrae las direccións url : Http, Ftp y Https _
  2.  de un archivo utilizando una expresión regular
  3. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  4.  
  5. Sub Extraer_Url(url_Path As String, Expresion As String)
  6.  
  7.  
  8.    'Variables para usar RegExp
  9.    Dim o_RegExp As RegExp
  10.    Dim o_Match As Match
  11.    Dim o_Matches As MatchCollection
  12.  
  13.  
  14.  
  15.   'Variables Fso para abrir y leer el archivo en la variable contenido
  16.   Dim fso As Object, F As Object, Contenido As String
  17.  
  18.   Set fso = CreateObject("Scripting.FileSystemObject")
  19.   'Abre el archivo
  20.   Set F = fso.OpenTextFile(url_Path, 1)
  21.  
  22.   'Lee el contenido del fichero y lo almacena en la var
  23.   Contenido = F.ReadAll
  24.  
  25.   'crea nuevo objeto RegExp
  26.   Set o_RegExp = New RegExp
  27.  
  28.   ' Para que no distinga mayúsculas de minúsculas
  29.   o_RegExp.IgnoreCase = True
  30.   o_RegExp.Global = True
  31.  
  32.   ' A la propiedad Pattern se le pasa la Expresión regular
  33.   o_RegExp.Pattern = Expresion
  34.   'Ejecuta y busca
  35.   Set o_Matches = o_RegExp.Execute(Contenido)
  36.  
  37.   ' Recorre en la colección
  38.   For Each o_Match In o_Matches
  39.      'Agrega las url al control List
  40.      List1.AddItem Replace(o_Match.Value, Chr(34), vbNullString)
  41.   Next
  42.  
  43.   'Cierra el archivo
  44.   F.Close
  45.  
  46.  
  47.  
  48.  
  49. End Sub
  50.  
  51. Private Sub Command1_Click()
  52.  
  53.    Dim Expresion As String
  54.  
  55.    ' Expresión regular
  56.    Expresion = "(ftp|http|https):\/\/(\S)+.swf" & Chr(34)
  57.  
  58.    With CommonDialog1
  59.        .ShowOpen
  60.  
  61.        If .FileName = "" Then Exit Sub
  62.  
  63.        'Le pasa el path del archivo a leer y la expresión regular anterior
  64.        Call Extraer_Url(.FileName, Expresion)
  65.    Text1.Text = List1.List(0)
  66.    List1.Clear
  67.    End With
  68.  
  69. End Sub
  70.  
  71. Private Sub Form_Load()
  72.    Me.Caption = " Ejemplo que utiliza expresiones regulares" _
  73.                 & " Para extraer los enlaces de un archivo"
  74.  
  75.    Command1.Caption = " Abrir archivo y Extraer "
  76. End Sub
  77.  

pero yo necesito arreglar el primer source para sacarlo directamente del webbrowser? que estoy haciendo mal? gracias


Título: Re: ayudita expresion regular
Publicado por: raul338 en 28 Octubre 2010, 19:20 pm
Código
  1. Expresion = "(ftp|http|https):\/\/(\S)+.swf" & Chr(34)

No entiendo porque usas el Chr(34) porque sin este funciona perfectamente :)

PD: pon el code en vb asi se ve mejor [code=vb][/code]


Título: Re: ayudita expresion regular
Publicado por: Psyke1 en 28 Octubre 2010, 19:28 pm
Código
  1. Expresion = "(ftp|http|https):\/\/(\S)+.swf" & Chr(34)

No entiendo porque usas el Chr(34) porque sin este funciona perfectamente :)

PD: pon el code en vb asi se ve mejor [code=vb][/code]
Exacto, tiene pinta de ser eso... :P
Por cierto, actualiza la RegExp como dije en mi anterior post, que vi que no la cambiaste. :silbar:

DoEvents! :P


Título: Re: ayudita expresion regular
Publicado por: viher en 28 Octubre 2010, 21:37 pm
pues si ya funciona a la perfección, gracias por la ayuda  ;-)


Título: Re: ayudita expresion regular
Publicado por: viher en 30 Octubre 2010, 12:38 pm
una última preguntilla,es que no consigo resolverla,quiero sacar lo siguiente,que con una expresion regular sea:

Código:
<div class="col_titulo col_superior" >TEXTO A SACAR</div>

es decir una expresión regular que de alguna forma lea desde <div class="col_titulo col_superior" > hasta </div> y me saque el texto que hay dentro del div. Me haría falta esa expresión regular.

Gracias!


Título: Re: ayudita expresion regular
Publicado por: raul338 en 30 Octubre 2010, 14:52 pm
Código:
\<div class\=\"col_titulo col_superior\"\>(.+)\<\/div\>

Y lo sacas con los submatches (capturing groups se llaman en realidad)


Título: Re: ayudita expresion regular
Publicado por: viher en 30 Octubre 2010, 14:58 pm
Error de sintaxis:

Código
  1. Private Sub Command1_Click()
  2.    Dim Expresion As String
  3.    ' Expresión regular
  4.    Expresion = "\<div class\=\"col_titulo col_superior\"\>(.+)\<\/div\>"
  5.        Call Extraer_Url(Text2.Text, Expresion)
  6.    Text1.Text = List1.List(0)
  7.    List1.Clear
  8. End Sub


Título: Re: ayudita expresion regular
Publicado por: raul338 en 30 Octubre 2010, 15:03 pm
jeje, cuando conviertes comillas en vb se transforma en "" jeje :P

Código
  1. Expresion = "\<div class\=\" & Chr$(34) & "col_titulo col_superior\" & Chr$(34) & "\>(.+)\<\/div\>"

o sino

Código:
Expresion = "\<div class\=\""col_titulo col_superior\""\>(.+)\<\/div\>"


Título: Re: ayudita expresion regular
Publicado por: Psyke1 en 30 Octubre 2010, 15:13 pm
EDIT: No vi tu respuesta raul! :laugh:

Normal, las comillas entre comillas se ponen dobles comillas... :xD (que bien explico eh?  :-*)

Un ejemplo:
Citar
Hola "amigo" xD

Seria:
Código
  1. sString = "Hola ""amigo"" xD"



Supongo que buscabas algo asi:
Código
  1. Option Explicit
  2.  
  3. Public Function Get_Text(ByVal sText As String) As Collection
  4. Const sPatern                   As String = "\<div class\=""col_titulo col_superior"" \>\s*(.+)\s*\<\/div\>"
  5. Dim cTemp                       As New Collection
  6. Dim oRegExp                     As Object
  7. Dim oMatch                      As Object
  8. Dim oMatches                    As Object
  9. Dim Q                           As Long
  10.  
  11.    Set oRegExp = CreateObject("VBScript.RegExp")
  12.  
  13.    With oRegExp
  14.        .Pattern = sPatern
  15.        .Global = True
  16.        .IgnoreCase = True
  17.    End With
  18.  
  19.    Set oMatches = oRegExp.Execute(sText)
  20.  
  21.    For Q = 0 To oMatches.Count - 1
  22.        Set oMatch = oMatches(Q)
  23.        cTemp.Add oMatch.SubMatches(0)
  24.    Next Q
  25.  
  26.    Set Get_Text = cTemp
  27. End Function
  28.  
  29.  
  30. Private Sub Form_Load()
  31. Dim vItem                   As Variant
  32. Dim S                       As String
  33.    S = "<div class=""col_titulo col_superior"" >¡¡Que vivan</div>" & vbNewLine & _
  34.        "<div class=""col_titulo col_superior"" >las</div>" & vbNewLine & _
  35.        "<div class=""col_titulo col_superior"" >Ranas! :D</div>"
  36.  
  37.    For Each vItem In Get_Text(S)
  38.        Debug.Print vItem
  39.    Next vItem
  40. End Sub

Resultado :
Código:
¡¡Que vivan
las
Ranas! :D



Yo que tu me plantearia aprender RegExp en vez de preguntar cada duda que tengas... ;)

DoEvents! :P


Título: Re: ayudita expresion regular
Publicado por: viher en 30 Octubre 2010, 15:20 pm
jeje, cuando conviertes comillas en vb se transforma en "" jeje :P

Código
  1. Expresion = "\<div class\=\" & Chr$(34) & "col_titulo col_superior\" & Chr$(34) & "\>(.+)\<\/div\>"

o sino

Código:
Expresion = "\<div class\=\""col_titulo col_superior\""\>(.+)\<\/div\>"

lo he probado pero me devuelve todo, es decir:

Código:
<DIV class=col_titulo col_superior>TEXTO A SACAR</DIV>

y yo lo que necesito es que me saque solo el "TEXTO A SACAR" sin los divs por los lados.

gracias!


Título: Re: ayudita expresion regular
Publicado por: Psyke1 en 30 Octubre 2010, 15:22 pm
Creo que no has visto mi respuesta... :silbar:
Como bien te dijo el feo de raul, usa SubMatches. :)

DoEvents! :P


Título: Re: ayudita expresion regular
Publicado por: viher en 30 Octubre 2010, 15:33 pm
Creo que no has visto mi respuesta... :silbar:
Como bien te dijo el feo de raul, usa SubMatches. :)

DoEvents! :P


uso el código que me pusiste pero no hace nada...


Título: Re: ayudita expresion regular
Publicado por: Psyke1 en 30 Octubre 2010, 15:39 pm
Jajajajajajajajaja :laugh: :laugh: :laugh: :laugh:

Debug.Print te lo imprime en una ventana llamada Inmediato (esta abajo) cuando lo ejecutas.
(http://visualbasic.freetutes.com/learn-vb6-advanced/images3/18.21.jpg)
No obstante puedes cambiar el Debug.Print por MsgBox si lo deseas.

DoEvents! :P


Título: Re: ayudita expresion regular
Publicado por: viher en 30 Octubre 2010, 16:34 pm
hice las siguiente modificaciones pero no me devuelve ningún valor

Código
  1. Option Explicit
  2.  
  3. Public Function Get_Text(ByVal sText As String) As Collection
  4. Const sPatern                   As String = "\<div class\=""col_titulo col_superior"" \>\s*(.+)\s*\<\/div\>"
  5. Dim cTemp                       As New Collection
  6. Dim oRegExp                     As Object
  7. Dim oMatch                      As Object
  8. Dim oMatches                    As Object
  9. Dim Q                           As Long
  10.  
  11.    Set oRegExp = CreateObject("VBScript.RegExp")
  12.  
  13.    With oRegExp
  14.        .Pattern = sPatern
  15.        .Global = True
  16.        .IgnoreCase = True
  17.    End With
  18.  
  19.    Set oMatches = oRegExp.Execute(sText)
  20.  
  21.    For Q = 0 To oMatches.Count - 1
  22.        Set oMatch = oMatches(Q)
  23.        cTemp.Add oMatch.SubMatches(0)
  24.    Next Q
  25.  
  26.    Set Get_Text = cTemp
  27. End Function
  28. 'Sub que extrae las direccións url : Http, Ftp y Https _
  29.  de un archivo utilizando una expresión regular
  30. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  31.  
  32. Sub Extraer_Url(url_Path As String, Expresion As String)
  33.    'Variables para usar RegExp
  34.    Dim o_RegExp As RegExp
  35.    Dim o_Match As Match
  36.    Dim o_Matches As MatchCollection
  37.   'Variables Fso para abrir y leer el archivo en la variable contenido
  38.   Dim Contenido As String
  39.   'Lee el contenido del fichero y lo almacena en la var
  40.   Contenido = Text2.Text
  41.   'crea nuevo objeto RegExp
  42.   Set o_RegExp = New RegExp
  43.   ' Para que no distinga mayúsculas de minúsculas
  44.   o_RegExp.IgnoreCase = True
  45.   o_RegExp.Global = True
  46.   ' A la propiedad Pattern se le pasa la Expresión regular
  47.   o_RegExp.Pattern = Expresion
  48.   'Ejecuta y busca
  49.   Set o_Matches = o_RegExp.Execute(Contenido)
  50.   ' Recorre en la colección
  51.   For Each o_Match In o_Matches
  52.      'Agrega las url al control List
  53.      List1.AddItem Replace(o_Match.Value, Chr(34), vbNullString)
  54.   Next
  55.  
  56. End Sub
  57.  
  58. Private Sub Command1_Click()
  59.    Dim Expresion As String
  60.    ' Expresión regular
  61.    Expresion = "\<div class\=\""col_titulo col_superior\""\>(.+)\<\/div\>"
  62.        Call Extraer_Url(Text2.Text, Expresion)
  63.    Text1.Text = List1.List(0)
  64.    List1.Clear
  65. End Sub
  66.  
  67. Private Sub Command2_Click()
  68. Text2.Text = WebBrowser1.Document.documentElement.innerHTML
  69. End Sub
  70.  
  71. Private Sub Command3_Click()
  72.    Dim vItem                   As Variant
  73. Dim S                       As String
  74.    S = Text1.Text
  75.  
  76.    For Each vItem In Get_Text(S)
  77.        Text3.Text = vItem
  78.    Next vItem
  79. End Sub
  80.  
  81. Private Sub Form_Load()
  82. WebBrowser1.Navigate ("http://www.rinconjuegos.com/just-jhon/")
  83.    Me.Caption = " Ejemplo que utiliza expresiones regulares" _
  84.                 & " Para extraer los enlaces de un archivo"
  85.  
  86.    Command1.Caption = " Abrir archivo y Extraer "
  87. End Sub
  88.  


Título: Re: ayudita expresion regular
Publicado por: Psyke1 en 30 Octubre 2010, 16:52 pm
.
Si solo necesitas una extracción haz asi:

Código
  1. Option Explicit
  2.  
  3. Public Function Get_Text(ByVal sText As String) As String
  4. Const sPatern                   As String = "\<div class\=""col_titulo col_superior"" \>\s*(.+)\s*\<\/div\>"
  5. Dim oRegExp                     As Object
  6. Dim oMatch                      As Object
  7. Dim oMatches                    As Object
  8.  
  9.    Set oRegExp = CreateObject("VBScript.RegExp")
  10.  
  11.    With oRegExp
  12.        .Pattern = sPatern
  13.        .Global = True
  14.        .IgnoreCase = True
  15.    End With
  16.  
  17.    Set oMatches = oRegExp.Execute(sText)
  18.    Set oMatch = oMatches(0)
  19.  
  20.    Get_Text = oMatch.SubMatches(0)
  21. End Function
  22.  
  23. Private Sub Form_Load()
  24. Dim S                       As String
  25.    S = "<div class=""col_titulo col_superior"" > ¡Vivan las ranas!   </div>"
  26.  
  27.    MsgBox Get_Text(S)
  28. End Sub

Personalmente ya no te voy a ayudar mas en este hilo, te estamos haciendo los deberes de una manera exagerada. :¬¬
Creo que debes estudiar mucho, tienes algunos errores muy basicos. :-\
Si te fijas, con las funciones que te di y un poco de sentido comun, no te deberia de costar hacerlo. ;)

DoEvents! :P


Título: Re: ayudita expresion regular
Publicado por: viher en 30 Octubre 2010, 17:01 pm
vale,solo una cosilla mas,lo que me devuelve tu code es "vivan las ranas",pero yo quiero que me devuelva lo que hay escrito en el Text1.Text y hago lo siguiente:

Código
  1. Dim S                       As String
  2.    S = Text1.Text
  3.  
  4.    MsgBox Get_Text(S)

pero me da error,porque? gracias!


Título: Re: ayudita expresion regular
Publicado por: raul338 en 30 Octubre 2010, 17:03 pm
Hay algo mal, por ahi no es la expresion regular que necesitas

EDIT:

Código
  1.   For Each o_Match In o_Matches
  2.      'Agrega las url al control List
  3.      List1.AddItem Replace(o_Match.Value, Chr(34), vbNullString)
  4.   Next
  5.  

Deberías cambiarlo por esto

Código
  1.   For Each o_Match In o_Matches
  2.      'Agrega las url al control List
  3.      List1.AddItem Replace(o_Match.SubMatches(0), Chr(34), vbNullString)
  4.   Next
  5.  

Porque es como te dije, debes obtener los submatches, no los matches en si


Título: Re: ayudita expresion regular
Publicado por: viher en 30 Octubre 2010, 17:13 pm
Hay algo mal, por ahi no es la expresion regular que necesitas

EDIT:

Código
  1.   For Each o_Match In o_Matches
  2.      'Agrega las url al control List
  3.      List1.AddItem Replace(o_Match.Value, Chr(34), vbNullString)
  4.   Next
  5.  

Deberías cambiarlo por esto

Código
  1.   For Each o_Match In o_Matches
  2.      'Agrega las url al control List
  3.      List1.AddItem Replace(oMatch.SubMatches(0), Chr(34), vbNullString)
  4.   Next
  5.  

Porque es como te dije, debes obtener los submatches, no los matches en si

Variable no definida  :-\


Título: Re: ayudita expresion regular
Publicado por: raul338 en 30 Octubre 2010, 17:17 pm
viher fijate las variables o_Match, o_Matches, y o_RegExp .... cambiales el nombre :¬¬

en este pequeño tipo de cosas las deberias hacer por ti mismo

Aunque el fallo fue mio, deberias darte cuenta


Título: Re: ayudita expresion regular
Publicado por: viher en 30 Octubre 2010, 17:31 pm
viher fijate las variables o_Match, o_Matches, y o_RegExp .... cambiales el nombre :¬¬

en este pequeño tipo de cosas las deberias hacer por ti mismo

Aunque el fallo fue mio, deberias darte cuenta

gracias raul338,ya lo conseguí  ;-)


Título: Re: ayudita expresion regular
Publicado por: Psyke1 en 31 Octubre 2010, 02:56 am
viher fijate las variables o_Match, o_Matches, y o_RegExp .... cambiales el nombre :¬¬

en este pequeño tipo de cosas las deberias hacer por ti mismo

Aunque el fallo fue mio, deberias darte cuenta

gracias raul338,ya lo conseguí  ;-)

hallelujah :laugh: :laugh: :laugh: :laugh:

DoEvents! :P


Título: Re: ayudita expresion regular
Publicado por: viher en 31 Octubre 2010, 12:45 pm
alguien me puede pasar algún tutorial para aprender Regexp?? ya que he estado mirando y no he encontrado ninguno para VB6. Gracias!


Título: Re: ayudita expresion regular
Publicado por: Psyke1 en 31 Octubre 2010, 15:13 pm
Tutoriales RegExp en vb6 (ingles) (http://lmgtfy.com/?q=vb6+regexp)
Tutoriales RegExp en vb6 (español) (http://Tutoriales RegExp en vb6 (ingles))

Con esto te podrias hacer una idea, y viendo ejemplos hechos tambien... ;)

DoEvents! :P


Título: Re: ayudita expresion regular
Publicado por: viher en 2 Noviembre 2010, 20:38 pm
estuve leyendome unos tutoriales e hice esta expresión regular,pero no me funciona:

Código:
\<DIV align\=\""justify""\\>(.+)\<\/DIV\>

lo que quiero es que me saque el texto que hay entre <div align="justify"> TEXTO A SACAR </div>,pero no me funciona,cual es el problema? gracias!


Título: Re: ayudita expresion regular
Publicado por: Psyke1 en 2 Noviembre 2010, 21:00 pm
Prueba a ponerlo en minusculas, si funciona pon el IgnoreCase en true(para ignorar mayusculas)
Seria asi:
Código
  1. sPatern = "\<div align\=""justify""\>(.+)\<\/div\>"
Es sentido comun, tampoco creo que te costara mucho cuando se te dio un ejemplo casi igual post atras... :rolleyes:

DoEvents! :P


Título: Re: ayudita expresion regular
Publicado por: viher en 2 Noviembre 2010, 23:20 pm
no me funciona :(

Código
  1. Sub Extraer_Url(url_Path As String, Expresion As String)
  2.    'Variables para usar RegExp
  3.    Dim o_RegExp As RegExp
  4.    Dim o_Match As Match
  5.    Dim o_Matches As MatchCollection
  6.   'Variables Fso para abrir y leer el archivo en la variable contenido
  7.   Dim Contenido As String
  8.   'Lee el contenido del fichero y lo almacena en la var
  9.   Contenido = Text2.Text
  10.   'crea nuevo objeto RegExp
  11.   Set o_RegExp = New RegExp
  12.   ' Para que no distinga mayúsculas de minúsculas
  13.   o_RegExp.IgnoreCase = True
  14.   o_RegExp.Global = True
  15.   ' A la propiedad Pattern se le pasa la Expresión regular
  16.   o_RegExp.Pattern = Expresion
  17.   'Ejecuta y busca
  18.   Set o_Matches = o_RegExp.Execute(Contenido)
  19.   ' Recorre en la colección
  20.   For Each o_Match In o_Matches
  21.      'Agrega las url al control List
  22.      List1.AddItem Replace(o_Match.Value, Chr(34), vbNullString)
  23.   Next
  24.  
  25. End Sub
  26.  
  27. Private Sub Command1_Click()
  28.    Text2.Text = WebBrowser1.Document.documentElement.innerHTML
  29.    Dim Expresion As String
  30.    ' Expresión regular
  31.    Expresion = "\<div align\=\""justify""\\>(.+)\<\/div\>"
  32.        Call Extraer_Url(Text2.Text, Expresion)
  33.    Text1.Text = List1.List(0)
  34.    List1.Clear
  35. End Sub
  36.  
  37. Private Sub Form_Load()
  38. WebBrowser1.Navigate ("http://www.web.com")
  39. End Sub
  40.  


Título: Re: ayudita expresion regular
Publicado por: Psyke1 en 3 Noviembre 2010, 00:16 am
A ver, de entrada, no has puesto la RegExp que te puse antes...
Prueba a ponerlo en minusculas, si funciona pon el IgnoreCase en true(para ignorar mayusculas)
Seria asi:
Código
  1. sPatern = "\<div align\=""justify""\>(.+)\<\/div\>"
Es sentido comun, tampoco creo que te costara mucho cuando se te dio un ejemplo casi igual post atras... :rolleyes:

DoEvents! :P
Ademas, tienes un ejemplo practicamente igual post atras...
No me gusta tu forma de hacerlo, prefiero una funcion y saltarme tener que añadir las referencias...
Algo asi: (Solo he cambiado un par de cosas)
Código
  1. Option Explicit
  2.  
  3. Public Function Get_Text(ByVal sText As String, ByVal sPatern As String) As Collection
  4. Dim cTemp                       As New Collection
  5. Dim oRegExp                     As Object
  6. Dim oMatch                      As Object
  7. Dim oMatches                    As Object
  8. Dim Q                           As Long
  9.  
  10.    Set oRegExp = CreateObject("VBScript.RegExp") 'Evitamos la referencia
  11.  
  12.    With oRegExp
  13.        .Pattern = sPatern
  14.        .Global = True
  15.        .IgnoreCase = True
  16.    End With
  17.  
  18.    Set oMatches = oRegExp.Execute(sText)
  19.  
  20.    For Q = 0 To oMatches.Count - 1
  21.        Set oMatch = oMatches(Q)
  22.        cTemp.Add oMatch.SubMatches(0)
  23.    Next Q
  24.  
  25.    Set Get_Text = cTemp
  26. End Function
  27.  
  28. Private Sub Form_Load()
  29. Dim vItem                   As Variant
  30. Dim S                       As String
  31.    S = "<div align=""justify"">¡¡Que vivan</div>" & vbNewLine & _
  32.        "<div align=""justify"">las</div>" & vbNewLine & _
  33.        "<div align=""justify"">Ranas! :D</div>"
  34.  
  35.    'La RegExp bien hecha
  36.    For Each vItem In Get_Text(S, "\<div align\=""justify""\>(.+)\<\/div\>")
  37.        MsgBox vItem
  38.    Next vItem
  39. End Sub
Te lo repito de nuevo, lee manuales, ya no te digo tanto de RegExp sino de vB.

DoEvents! :P


Título: Re: ayudita expresion regular
Publicado por: viher en 3 Noviembre 2010, 00:43 am
sige sin devolverme nada

Código
  1. Option Explicit
  2.  
  3. Public Function Get_Text(ByVal sText As String, ByVal sPatern As String) As Collection
  4. Dim cTemp                       As New Collection
  5. Dim oRegExp                     As Object
  6. Dim oMatch                      As Object
  7. Dim oMatches                    As Object
  8. Dim Q                           As Long
  9.  
  10.    Set oRegExp = CreateObject("VBScript.RegExp") 'Evitamos la referencia
  11.  
  12.    With oRegExp
  13.        .Pattern = sPatern
  14.        .Global = True
  15.        .IgnoreCase = True
  16.    End With
  17.  
  18.    Set oMatches = oRegExp.Execute(sText)
  19.  
  20.    For Q = 0 To oMatches.Count - 1
  21.        Set oMatch = oMatches(Q)
  22.        cTemp.Add oMatch.SubMatches(0)
  23.    Next Q
  24.  
  25.    Set Get_Text = cTemp
  26. End Function
  27. Private Sub Command1_Click()
  28.    Text2.Text = WebBrowser1.Document.documentElement.innerHTML
  29.    Dim vItem                   As Variant
  30. Dim S                       As String
  31.    S = Text2.Text
  32.    For Each vItem In Get_Text(S, "\<div align\=""justify""\>(.+)\<\/div\>")
  33.        MsgBox vItem
  34.    Next vItem
  35.    Text1.Text = List1.List(0)
  36.    List1.Clear
  37. End Sub
  38.  
  39. Private Sub Form_Load()
  40. WebBrowser1.Navigate ("http://www.web.com/")
  41. End Sub
  42.  


Título: Re: ayudita expresion regular
Publicado por: Psyke1 en 3 Noviembre 2010, 01:56 am
Si te fijas, el code de mi anterior post funciona no?
Pues ahora te queda la intrincada y temible tarea de adaptarlo a tus necesidades! :laugh:
WooooW :o
Seras capaz? >:D
Yo ya no te digo más...

DoEvents! :P


Título: Re: ayudita expresion regular
Publicado por: viher en 6 Noviembre 2010, 20:12 pm
pues no soy capaz,quizás no sea tan listo como tu   :-\


Título: Re: ayudita expresion regular
Publicado por: Psyke1 en 6 Noviembre 2010, 21:25 pm
pues no soy capaz,quizás no sea tan listo como tu   :-\
No hablo de ser o no listo, hablo de leer manuales y probar, nada más...
Aprenderas 5 veces más que si te damos la solucion a cada problema que tengas.

DoEvents! :P