ayudita expresion regular

Iniciado por viher, 26 Octubre 2010, 21:22 PM

0 Miembros y 1 Visitante están viendo este tema.

Psyke1

Jajajajajajajajaja :laugh: :laugh: :laugh: :laugh:

Debug.Print te lo imprime en una ventana llamada Inmediato (esta abajo) cuando lo ejecutas.

No obstante puedes cambiar el Debug.Print por MsgBox si lo deseas.

DoEvents! :P

viher

hice las siguiente modificaciones pero no me devuelve ningún valor

Código (vb) [Seleccionar]
Option Explicit

Public Function Get_Text(ByVal sText As String) As Collection
Const sPatern                   As String = "\<div class\=""col_titulo col_superior"" \>\s*(.+)\s*\<\/div\>"
Dim cTemp                       As New Collection
Dim oRegExp                     As Object
Dim oMatch                      As Object
Dim oMatches                    As Object
Dim Q                           As Long

    Set oRegExp = CreateObject("VBScript.RegExp")

    With oRegExp
        .Pattern = sPatern
        .Global = True
        .IgnoreCase = True
    End With

    Set oMatches = oRegExp.Execute(sText)

    For Q = 0 To oMatches.Count - 1
        Set oMatch = oMatches(Q)
        cTemp.Add oMatch.SubMatches(0)
    Next Q

    Set Get_Text = cTemp
End Function
'Sub que extrae las direccións url : Http, Ftp y Https _
de un archivo utilizando una expresión regular
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub Extraer_Url(url_Path As String, Expresion As String)
    'Variables para usar RegExp
    Dim o_RegExp As RegExp
    Dim o_Match As Match
    Dim o_Matches As MatchCollection
   'Variables Fso para abrir y leer el archivo en la variable contenido
   Dim Contenido As String
   'Lee el contenido del fichero y lo almacena en la var
   Contenido = Text2.Text
   'crea nuevo objeto RegExp
   Set o_RegExp = New RegExp
   ' Para que no distinga mayúsculas de minúsculas
   o_RegExp.IgnoreCase = True
   o_RegExp.Global = True
   ' A la propiedad Pattern se le pasa la Expresión regular
   o_RegExp.Pattern = Expresion
   'Ejecuta y busca
   Set o_Matches = o_RegExp.Execute(Contenido)
   ' Recorre en la colección
   For Each o_Match In o_Matches
      'Agrega las url al control List
      List1.AddItem Replace(o_Match.Value, Chr(34), vbNullString)
   Next

End Sub

Private Sub Command1_Click()
    Dim Expresion As String
    ' Expresión regular
    Expresion = "\<div class\=\""col_titulo col_superior\""\>(.+)\<\/div\>"
        Call Extraer_Url(Text2.Text, Expresion)
    Text1.Text = List1.List(0)
    List1.Clear
End Sub

Private Sub Command2_Click()
Text2.Text = WebBrowser1.Document.documentElement.innerHTML
End Sub

Private Sub Command3_Click()
    Dim vItem                   As Variant
Dim S                       As String
    S = Text1.Text

    For Each vItem In Get_Text(S)
        Text3.Text = vItem
    Next vItem
End Sub

Private Sub Form_Load()
WebBrowser1.Navigate ("http://www.rinconjuegos.com/just-jhon/")
    Me.Caption = " Ejemplo que utiliza expresiones regulares" _
                 & " Para extraer los enlaces de un archivo"

    Command1.Caption = " Abrir archivo y Extraer "
End Sub

Psyke1

.
Si solo necesitas una extracción haz asi:

Código (vb) [Seleccionar]
Option Explicit

Public Function Get_Text(ByVal sText As String) As String
Const sPatern                   As String = "\<div class\=""col_titulo col_superior"" \>\s*(.+)\s*\<\/div\>"
Dim oRegExp                     As Object
Dim oMatch                      As Object
Dim oMatches                    As Object
   
    Set oRegExp = CreateObject("VBScript.RegExp")

    With oRegExp
        .Pattern = sPatern
        .Global = True
        .IgnoreCase = True
    End With

    Set oMatches = oRegExp.Execute(sText)
    Set oMatch = oMatches(0)

    Get_Text = oMatch.SubMatches(0)
End Function

Private Sub Form_Load()
Dim S                       As String
    S = "<div class=""col_titulo col_superior"" > ¡Vivan las ranas!   </div>"
   
    MsgBox Get_Text(S)
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

viher

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 (vb) [Seleccionar]
Dim S                       As String
    S = Text1.Text

    MsgBox Get_Text(S)


pero me da error,porque? gracias!

raul338

#24
Hay algo mal, por ahi no es la expresion regular que necesitas

EDIT:

Cita de: viher en 30 Octubre 2010, 16:34 PM
Código (vb) [Seleccionar]

  For Each o_Match In o_Matches
     'Agrega las url al control List
     List1.AddItem Replace(o_Match.Value, Chr(34), vbNullString)
  Next


Deberías cambiarlo por esto

Código (vb) [Seleccionar]

  For Each o_Match In o_Matches
     'Agrega las url al control List
     List1.AddItem Replace(o_Match.SubMatches(0), Chr(34), vbNullString)
  Next


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

viher

#25
Cita de: raul338 en 30 Octubre 2010, 17:03 PM
Hay algo mal, por ahi no es la expresion regular que necesitas

EDIT:

Cita de: viher en 30 Octubre 2010, 16:34 PM
Código (vb) [Seleccionar]

   For Each o_Match In o_Matches
      'Agrega las url al control List
      List1.AddItem Replace(o_Match.Value, Chr(34), vbNullString)
   Next


Deberías cambiarlo por esto

Código (vb) [Seleccionar]

   For Each o_Match In o_Matches
      'Agrega las url al control List
      List1.AddItem Replace(oMatch.SubMatches(0), Chr(34), vbNullString)
   Next


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

Variable no definida  :-\

raul338

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

viher

Cita de: 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

gracias raul338,ya lo conseguí  ;-)

Psyke1

Cita de: viher en 30 Octubre 2010, 17:31 PM
Cita de: 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

gracias raul338,ya lo conseguí  ;-)

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

DoEvents! :P

viher

alguien me puede pasar algún tutorial para aprender Regexp?? ya que he estado mirando y no he encontrado ninguno para VB6. Gracias!