Autor
|
Tema: ParseKeys (REG EXP) limpiar claves del NOD32 (Leído 2,704 veces)
|
Elemental Code
Desconectado
Mensajes: 622
Im beyond the system
|
Metele el html raw de casi cuaaaalquier sitio de licencias y esto las limpia Option Explicit '================================================= ' º Nombre : mParseKeys.bas ' º Version : 2.0 ' º Autor : Milton Candelero ' º Alias : ElementalCode ' º Pais : Argentina ' º Fecha : 13/OCT/2011 ' º Dedicado a: El amor de mi vida ' º Licencia : GNU PUBLIC LICENCE v.3 (Or higher) '================================================= ' This file is part of Open Nod32 Keyfinder. ' ' Open Nod32 Keyfinder is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or any later version. ' ' Open Nod32 Keyfinder is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY; without even the implied warranty of ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ' GNU General Public License for more details. ' ' You should have received a copy of the GNU General Public License ' along with Open Nod32 Keyfinder. If not, see <http://www.gnu.org/licenses/>. Function ParseKeys(ByVal sHTML As String, ByRef sUser() As String, ByRef sPass() As String) 'Constantes para los patterns de busqueda Const USERPATTERN As String = "(?:EAV|TRIAL|ESS)-\d{8}" Const PASSPATTERN As String = "(?:[pP]?assword:? |[pP]?assword:?|nod32key:)(\w{10})" 'Declarar variables para RegExp Dim oREuser As RegExp Dim oREpass As RegExp 'Variables para las colecciones de resultados Dim oMCuser As MatchCollection Dim oMCpass As MatchCollection 'Variables para las coincidencias Dim oMuser As Match Dim oMpass As Match 'Variables para los indices de las strings de salida _ y previamente la cantidad de repeticiones (ahorro variables) Dim cU As Byte Dim cP As Byte 'Crear los objetos del RegExp User y analizar Set oREuser = New RegExp With oREuser .Global = True .Pattern = USERPATTERN Set oMCuser = .Execute(sHTML) End With 'Crear los objetos del ExpReg Pass y analizar Set oREpass = New RegExp With oREpass .Global = True .Pattern = PASSPATTERN Set oMCpass = .Execute(sHTML) End With 'Dimensionar el array cU = oMCuser.Count - 1 ReDim sUser(cU) As String cU = 0 ' Vuelvo a cero para seguir usando esta variable. 'Guardar Resultados user For Each oMuser In oMCuser sUser(cU) = oMuser cU = cU + 1 Next 'Dimensionar el array cP = oMCpass.Count - 1 ReDim sPass(cP) As String cP = 0 ' Vuelvo a cero para seguir usando esta variable. 'Guardar Resultados pass For Each oMpass In oMCpass sPass(cP) = oMpass.SubMatches(0) cP = cP + 1 Next 'Destruir RegExp para ahorrar memoria y porque queda lindo :D Set oREuser = Nothing Set oREpass = Nothing End Function
|
|
« Última modificación: 23 Mayo 2012, 12:20 pm por Elemental Code »
|
En línea
|
I CODE FOR $$$ Programo por $$$ Hago tareas, trabajos para la facultad, lo que sea en VB6.0 Mis programas
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
La regExp de password se poria educir a
(?:[pP]?assword:? |nod32key:)(\w{10})
|
|
|
En línea
|
|
|
|
Elemental Code
Desconectado
Mensajes: 622
Im beyond the system
|
:O a ver que pruebo y lo añado, gracias. todavia patino un poco en esto de las regexp
No funciono, necesito que me reconozca password: asgiaha password:asgiaha y eso falla
|
|
« Última modificación: 23 Mayo 2012, 04:19 am por Elemental Code »
|
En línea
|
I CODE FOR $$$ Programo por $$$ Hago tareas, trabajos para la facultad, lo que sea en VB6.0 Mis programas
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
' º Nombre : mParseKeys.cls
¿Una clase para una función?
Quedaría más bonito si en vez de ingresar dos arrays utilizas un Type. Option Explicit Public Type NodUP User As String Password As String End Type Public Function ParseKeys(ByRef sHTML As String) As NodUP()
Creo que te puedes ahorrar el crear dos objetos, con uno yo creo que valdría.
Usas esto: (?:[pP]?assword:? |[pP]?assword:?|nod32key:)(\w{10}) Según lo tienes puesto, con el [pP]?, también te sacaría "assword". ( "palabra culo" en inglés ). Utilizando IgnoreCase cuando creas el objeto para que no se fije en ninguna mayúscula. Yo pondría algo así: (password|nod32key)\s*:?\s*(\w{10}) DoEvents!
|
|
« Última modificación: 23 Mayo 2012, 09:30 am por Psyke1 »
|
En línea
|
|
|
|
Elemental Code
Desconectado
Mensajes: 622
Im beyond the system
|
aja ni cuenta me habia dado del .cls Pense en usar un Type pero me parecio medio rebuscado al pedo. ademas no se si lo lei o estaba borracho que escribir resultados mediante byref es mas rapido que escribirlos como resultado de la funcion. Y esta bueno esa expresion regular, pero me gusta mas asi (ya no detecta assword ) (?:(?:[pP]{1})assword:?\s?|nod32key:?\s?)(\w{10}) No tengo ni jodida idea de como hacer que sea case sensitive o no
|
|
|
En línea
|
I CODE FOR $$$ Programo por $$$ Hago tareas, trabajos para la facultad, lo que sea en VB6.0 Mis programas
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
Así se pone: Set oREpass = New RegExp With oREpass .Global = True .Pattern = PASSPATTERN .IgnoreCase = True Set oMCpass = .Execute(sHTML) End With
La expresión regular que pones es fea y repites cosas. Lo más sencillo siempre mejor.
ademas no se si lo lei o estaba borracho que escribir resultados mediante byref es mas rapido que escribirlos como resultado de la funcion. Sería un procedimiento, puesto que no devuelve ningún valor, y si la velocidad es problema, siempre puedes hacer esto: Option Explicit Public Type NodUP User As String Password As String End Type Public Function ParseKeys(ByRef sHTML As String, ByRef UP As NodUP()) '// code End Sub
DoEvents!
|
|
« Última modificación: 23 Mayo 2012, 14:05 pm por Psyke1 »
|
En línea
|
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
Ups, perdon se me paso un ? al contestar (estaba en el cel, no pidas mucho ) igual cuando es uno solo no hace falta poner {1} ni tampoco poner otro grupo no capturador (?:[pP]assword:?\s*|nod32key:?\s*)(\w{10}) \s* significa que pueden haber tantos espacios como quieran, más flexible
|
|
|
En línea
|
|
|
|
|
|