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
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
(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?\*.swf
Deberia ir en Programacion general esto :P
Cita de: raul338 en 26 Octubre 2010, 21:33 PM
(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:
También podrias usar esta, aunque no incluye validación:
(https?|ftp):\/\/(\S)+.swf
http://foro.elhacker.net/programacion_visual_basic/ayudita_expresion_regular-t308911.0.html 'False
http://foro.elhacker.net/programacion_visual_basic/ayudita_expresion_regular-t308911.0.swf 'True
DoEvents! :P
^(?:(?>ht|f)tps?://)?(?:\w+[.-]\w+)+(?::\d+)?(?:\/[\w\-\.\?\,\'+&%\$_]*\.swf)*(?:\??(?:[\w\-\._]+=[\w\-\.\?\,\\'\/+%\$_]*&?)*)?(?:\#[\w]+)?$
Ahi esta mi expreg perfecta para swf :)
Ook raul, tu ganas!! :laugh: :laugh: :laugh: :laugh:
Muy bueno.
DoEvents! :P
Cita de: Mr. Frog en 26 Octubre 2010, 22:11 PM
También podrias usar esta, aunque no incluye validación:
(https?|ftp):\/\/(\S)+.swf
http://foro.elhacker.net/programacion_visual_basic/ayudita_expresion_regular-t308911.0.html 'False
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 ;-)
Oops! una pequeña corrección, mi RegExp seria asi:
(https?|ftp):\/\/(\S)+\.swf
No me funciona la tuya raul... :-(
DoEvents! :P
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:
'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 = "(ftp|http|https):\/\/(\S)+.swf" & Chr(34)
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 Form_Load()
WebBrowser1.Navigate ("http://www.web.com/")
Me.Caption = " Ejemplo que utiliza expresiones regulares" _
& " Para extraer los enlaces de un archivo"
Command1.Caption = " Abrir archivo y Extraer "
End Sub
y aqui el original que lo hace através de un common dialog y archivos (este funciona perfectamente)
'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 fso As Object, F As Object, Contenido As String
Set fso = CreateObject("Scripting.FileSystemObject")
'Abre el archivo
Set F = fso.OpenTextFile(url_Path, 1)
'Lee el contenido del fichero y lo almacena en la var
Contenido = F.ReadAll
'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
'Cierra el archivo
F.Close
End Sub
Private Sub Command1_Click()
Dim Expresion As String
' Expresión regular
Expresion = "(ftp|http|https):\/\/(\S)+.swf" & Chr(34)
With CommonDialog1
.ShowOpen
If .FileName = "" Then Exit Sub
'Le pasa el path del archivo a leer y la expresión regular anterior
Call Extraer_Url(.FileName, Expresion)
Text1.Text = List1.List(0)
List1.Clear
End With
End Sub
Private Sub Form_Load()
Me.Caption = " Ejemplo que utiliza expresiones regulares" _
& " Para extraer los enlaces de un archivo"
Command1.Caption = " Abrir archivo y Extraer "
End Sub
pero yo necesito arreglar el primer source para sacarlo directamente del webbrowser? que estoy haciendo mal? gracias
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]
Cita de: raul338 en 28 Octubre 2010, 19:20 PM
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
pues si ya funciona a la perfección, gracias por la ayuda ;-)
una última preguntilla,es que no consigo resolverla,quiero sacar lo siguiente,que con una expresion regular sea:
<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!
\<div class\=\"col_titulo col_superior\"\>(.+)\<\/div\>
Y lo sacas con los submatches (capturing groups se llaman en realidad)
Error de sintaxis:
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
jeje, cuando conviertes comillas en vb se transforma en "" jeje :P
Expresion = "\<div class\=\" & Chr$(34) & "col_titulo col_superior\" & Chr$(34) & "\>(.+)\<\/div\>"
o sino
Expresion = "\<div class\=\""col_titulo col_superior\""\>(.+)\<\/div\>"
EDIT: No vi tu respuesta raul! :laugh:
Normal, las comillas entre comillas se ponen dobles comillas... :xD (que bien explico eh? :-*)
Un ejemplo:
CitarHola "amigo" xD
Seria:
sString = "Hola ""amigo"" xD"
Supongo que buscabas algo asi:
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
Private Sub Form_Load()
Dim vItem As Variant
Dim S As String
S = "<div class=""col_titulo col_superior"" >¡¡Que vivan</div>" & vbNewLine & _
"<div class=""col_titulo col_superior"" >las</div>" & vbNewLine & _
"<div class=""col_titulo col_superior"" >Ranas! :D</div>"
For Each vItem In Get_Text(S)
Debug.Print vItem
Next vItem
End Sub
Resultado :
¡¡Que vivan
las
Ranas! :D
Yo que tu me plantearia aprender
RegExp en vez de preguntar cada duda que tengas... ;)
DoEvents! :P
Cita de: raul338 en 30 Octubre 2010, 15:03 PM
jeje, cuando conviertes comillas en vb se transforma en "" jeje :P
Expresion = "\<div class\=\" & Chr$(34) & "col_titulo col_superior\" & Chr$(34) & "\>(.+)\<\/div\>"
o sino
Expresion = "\<div class\=\""col_titulo col_superior\""\>(.+)\<\/div\>"
lo he probado pero me devuelve todo, es decir:
<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!
Creo que no has visto mi respuesta... :silbar:
Como bien te dijo el feo de raul, usa SubMatches. :)
DoEvents! :P
Cita de: Mr. Frog 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
uso el código que me pusiste pero no hace nada...
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
hice las siguiente modificaciones pero no me devuelve ningún valor
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
.
Si solo necesitas una extracción haz asi:
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
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:
Dim S As String
S = Text1.Text
MsgBox Get_Text(S)
pero me da error,porque? gracias!
Hay algo mal, por ahi no es la expresion regular que necesitas
EDIT:
Cita de: viher en 30 Octubre 2010, 16:34 PM
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
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
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
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
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 :-\
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
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í ;-)
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
alguien me puede pasar algún tutorial para aprender Regexp?? ya que he estado mirando y no he encontrado ninguno para VB6. Gracias!
Tutoriales RegExp en vb6 (ingles) (http://lmgtfy.com/?q=vb6+regexp)
Tutoriales RegExp en vb6 (español) (http://tutoriales%20regexp%20en%20vb6%20(ingles))
Con esto te podrias hacer una idea, y viendo ejemplos hechos tambien... ;)
DoEvents! :P
estuve leyendome unos tutoriales e hice esta expresión regular,pero no me funciona:
\<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!
Prueba a ponerlo en minusculas, si funciona pon el IgnoreCase en true(para ignorar mayusculas)
Seria asi:
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
no me funciona :(
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()
Text2.Text = WebBrowser1.Document.documentElement.innerHTML
Dim Expresion As String
' Expresión regular
Expresion = "\<div align\=\""justify""\\>(.+)\<\/div\>"
Call Extraer_Url(Text2.Text, Expresion)
Text1.Text = List1.List(0)
List1.Clear
End Sub
Private Sub Form_Load()
WebBrowser1.Navigate ("http://www.web.com")
End Sub
A ver, de entrada, no has puesto la RegExp que te puse antes...
Cita de: Mr. Frog en 2 Noviembre 2010, 21:00 PM
Prueba a ponerlo en minusculas, si funciona pon el IgnoreCase en true(para ignorar mayusculas)
Seria asi:
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)
Option Explicit
Public Function Get_Text(ByVal sText As String, ByVal sPatern As String) As Collection
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") 'Evitamos la referencia
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
Private Sub Form_Load()
Dim vItem As Variant
Dim S As String
S = "<div align=""justify"">¡¡Que vivan</div>" & vbNewLine & _
"<div align=""justify"">las</div>" & vbNewLine & _
"<div align=""justify"">Ranas! :D</div>"
'La RegExp bien hecha
For Each vItem In Get_Text(S, "\<div align\=""justify""\>(.+)\<\/div\>")
MsgBox vItem
Next vItem
End Sub
Te lo repito de nuevo, lee manuales, ya no te digo tanto de
RegExp sino de
vB.
DoEvents! :P
sige sin devolverme nada
Option Explicit
Public Function Get_Text(ByVal sText As String, ByVal sPatern As String) As Collection
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") 'Evitamos la referencia
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
Private Sub Command1_Click()
Text2.Text = WebBrowser1.Document.documentElement.innerHTML
Dim vItem As Variant
Dim S As String
S = Text2.Text
For Each vItem In Get_Text(S, "\<div align\=""justify""\>(.+)\<\/div\>")
MsgBox vItem
Next vItem
Text1.Text = List1.List(0)
List1.Clear
End Sub
Private Sub Form_Load()
WebBrowser1.Navigate ("http://www.web.com/")
End Sub
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
pues no soy capaz,quizás no sea tan listo como tu :-\
Cita de: viher en 6 Noviembre 2010, 20:12 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