Función pública FindEmailInString (StringToSearch como secuencia) como secuencia
sExp dévil como secuencia
sExp = “\ b [A-Z0-9. _%+-] +@ [A-Z0-9. -] + \. [A-Z] {2.4} \ b”
rgxExtract de FindEmailInString (StringToSearch, sExp)
Función del final
rgxExtract público de la función (blanco opcional de ByVal como variante, _
Patrón opcional como la secuencia = "", _
Artículo opcional de ByVal como de largo = 0, _
Con diferenciación entre mayúsculas y minúsculas opcional como boleano = falso, _
FailOnError opcional como boleano = verdad, _
Opcional persistir como boleano = falso) _
Como variante
'Función que empareja de la expresión regular conveniente para el uso
'en VB/A generalmente y en preguntas del acceso.
'Por Juan Nurick. 14 de enero de 06 actualizado.
'Toma una secuencia de búsqueda (blanco) y una expresión regular
'(Patrón), y una discusión opcional del artículo.
'- Si se omite el artículo y una subsecuencia de la blanco empareja el patrón,
' vueltas que subsecuencia.
'- Si el patrón incluye agrupar paréntesis, una subsecuencia de la blanco
' empareja el patrón, y el artículo es un número entero, vuelve el submatch
' especificado por Item (el primer submatch es el punto 0). Si no hay
' bastantes submatches, falta de información de las vueltas. Valores negativos del comienzo del artículo
' contando con el submatch pasado.
'- Si ninguÌn fósforo, vueltas anula.
'- Las vueltas anulan en error a menos que FailOnError sea verdad.
' Empareja siempre contra la blanco entera (es decir global y
' Multilínea ser verdad).
'Fósforos con diferenciación entre mayúsculas y minúsculas sin importar caso.
'Persisten los controles si el objeto compilado de RegExp
'permanece en la memoria lista para la llamada siguiente a
'función o si está dispuesta inmediatamente. Esto
'significa que la función se puede utilizar en preguntas sin tener
'para crear, compilar, utilizar y destruir un nuevo objeto de RegExp para
'cada fila que es procesada. Pero también significa que el objeto
los 'restos en memoria después de la pregunta han funcionado. Para destruir
'oponerse y lanzar la memoria, llaman esta función una
'vez última sin discusiones.
'
'Llamando la función con diversas discusiones (e.g. un nuevo
El 'patrón) recompiles el objeto de RegExp, tan
'la función se puede utilizar en diversas preguntas. Al menos allí
'pueden ser los problemas si dos hilos de rosca están llamando la función en
'el mismo tiempo.
rgxPROC_NAME de Const = “rgxExtract”
Mineral estático como objeto 'VBScript_RegExp_55.RegExp
Los 'medios estáticos de la declaración no tenemos que crear
'y compilar el objeto de RegExp cada sola hora
'se llama la función.
oMatches déviles como objeto 'VBScript_RegExp_55.MatchCollection
En el error ErrHandler indicado
valor de vuelta del defecto del rgxExtract = de la falta de información '
'NOTA: si FailOnError es falso, vuelve la falta de información en error
Si IsMissing (blanco) entonces
'Ésta es la señal de disponer del mineral
Fijar el mineral = nada
Salir la función 'con el valor prefijado
Terminar si
'Crear el objeto de RegExp en caso de necesidad
Si el mineral entonces no es nada
Fijar el mineral = CreateObject (“VBScript.Regexp”)
Terminar si
Con el mineral
'Comprobar si las discusiones actuales (con excepción de blanco)
'ser diferente de ésos almacenados en mineral, y ponerlos al día
'(de tal modo recompiling el regex) solamente en caso de necesidad.
Si es con diferenciación entre mayúsculas y minúsculas = .IgnoreCase entonces
.IgnoreCase = no .IgnoreCase
Terminar si
. Global = verdad
. Multilínea = verdad
' Si es multilínea <> . Multilínea entonces
' . Multilínea = multilínea
' Terminar si
Si patrón <> . Patrón entonces
. Patrón = patrón
Terminar si
'Finalmente, ejecutar el fósforo
Si IsNull (blanco) entonces
rgxExtract = falta de información
Fijar los oMatches = oRE.Execute (la blanco)
Si oMatches.Count > 0 entonces
Si oMatches (0) .SubMatches.Count = 0 entonces
'NinguÌn () grupo en patrón: volver el fósforo
Si artículo < 0="" Then="">= oMatches.Count
El 'artículo positivo excedió el número de fósforos
rgxExtract = falta de información
Si FailOnError entonces
Err.Raise 9
Terminar si
Encajonar
rgxExtract = oMatches (artículo)
Extremo selecto
'Hay uno o más () grupos capturados en patrón
'volver el que está especificado por Item
Con los oMatches (0) .SubMatches
Si artículo < 0="" Then="">=. Cuenta
El 'artículo positivo excedió el número de submatches
rgxExtract = falta de información
Si FailOnError entonces
Err.Raise 9
Terminar si
Encajonar el 'número de artículo válido
rgxExtract =. Artículo (artículo)
Extremo selecto
Extremo con
Terminar si
rgxExtract = falta de información
Terminar si
Terminar si
Terminar con
'Poner en orden y salida normal
Si no persiste el mineral entonces fijado = nada
Salir la función
ErrHandler:
Si FailOnError entonces
Con errar
Seleccionar el caso. Número
'Substituir el mensaje del “error objeto-definido” del defecto
Caso 9: . Descripción = “subíndice fuera de la gama (el _ pedido del número de artículo”
y “era mayor que el número de fósforos encontrados, o que el número” de _
y “(...) el agrupar/que captura paréntesis en el patrón).”
Caso 13: . Descripción = “tipo unión mal hecha, probablemente porque” _
y “la discusión del "" de la blanco del "" no se podía convertir a una secuencia”
Caso 5017: . Descripción = “error de sintaxis en la expresión regular”
Caso 5018: . Descripción = “cuantificador inesperado en la expresión regular”
Caso 5019: . Descripción = “esperado “]” en la expresión regular "
Caso 5020: . Descripción = “esperado ")” en la expresión regular "
Caso
Si el mineral no es nada entonces 'no podido para crear el objeto de Regexp
. La descripción = “no podía crear el objeto de VBScript.RegExp. ” Y Err.Description
'Error inesperado
. Descripción = rgxPROC_NAME y “: ” y. Descripción
Terminar si
Terminar selecto
Fijar el mineral = nada
. Levantar Err.Number, rgxPROC_NAME, _
rgxPROC_NAME y “(): ” y. Descripción
Extremo con
'Fall silenciosamente
Err.Clear
Fijar el mineral = nada
Terminar si
Terminar la función
|