• Publicidad

Expresiones regulares en VB

Todo lo relacionado con lenguajes de programación distintos de Perl: PHP, Java, C++, Ruby, Python, etc.

Expresiones regulares en VB

Notapor Anthares » 2009-09-12 12:44 @572

Hola :D, esta vez me tocó programar en Visual Basic :roll: y quiero usar fuertemente expresiones regulares para resolver el problema pero algo que me es muy útil no lo veo en Visual Basic, que es cuando uno usa paréntesis en una expresión regular y luego puede obtener lo que macheo con lo que está en dicho lugar usando $1, $2 etc..

Vi que sí tiene para sustituir pero no lo que mencione antes :?

No estoy trabajando con la plataforma .NET, y tengo el Visual Studio 6.

PD: nunca programé en Visual Basic por eso estoy pidiendo una ayudita, ¡je! :mrgreen: porque si bien ya entendí cómo usar expresiones regulares en Visual, no el tema de los $1, $2... etc.
Anthares
Perlero nuevo
Perlero nuevo
 
Mensajes: 26
Registrado: 2007-04-30 07:18 @346

Publicidad

Re: expresiones regulares VB uso $1

Notapor explorer » 2009-09-12 13:18 @596

Ten en cuenta que las librerías de uso de las expresiones regulares están casi todas basadas en las de Perl, así que el comportamiento debe ser el mismo.

En tu caso, para capturar, se usa lo mismo: los paréntesis. Lo que ya es distinto es el modo de recuperar lo capturado.

Veamos un ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using vb Syntax Highlighting
Imports System.Text.RegularExpressions

Dim Args As String() = System.Environment.GetCommandLineArgs()

Dim EmailRegex As Regex = New Regex("(?<user>[^@]+)@(?<host>.+)")

Dim S As String = "[email protected]"

If Args.Length > 1
        S = Args(1)
End If

Dim M As Match = EmailRegex.Match(S)

If M.Success
        Console.WriteLine("User: " & M.Groups("user").Value)
        Console.WriteLine("Host: " & M.Groups("host").Value)
Else
        Console.WriteLine(s & " no es una dirección de correo válida")
End If
Console.WriteLine()

Console.WriteLine("Presione <ENTRAR> para salir...")
Console.ReadLine()
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Como ves, se trata de usar el objeto Match y solicitarle acceso a los valores devueltos. La diferencia con las capturas de las expresiones regulares es que son "con nombre", al estilo de como son ahora las capturas con Perl v5.10 (ver perlre, sección Extended Patterns, subsección (?<NAME>pattern)).

Se ve claramente, en este ejemplo, por qué la gente de estos foros preferimos usar Perl. Lo sentimos por ti, al no poder usarlo. Mi recomendación es que cambies de empresa.

Más información en Introduction to Regular Expressions (Scripting). Ejemplo sacado de CÓMO: Hacer coincidir con un patrón mediante expresiones regulares y Visual Basic .NET.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: expresiones regulares VB uso $1

Notapor Anthares » 2009-09-12 14:10 @632

Muchas gracias por la respuesta, pero a mi me estalla en mi Visual Basic v6.

Como que la sintaxis es distinta. Por ejemplo

Lo que si acepta es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using vb Syntax Highlighting
 ' Create a regular expression object.
  Set objRegExp = New RegExp

   'Set the pattern by using the Pattern property.
  objRegExp.Pattern = myPattern

   ' Set Case Insensitivity.
  objRegExp.IgnoreCase = True

   'Set global applicability.
  objRegExp.Global = True

   'Test whether the String can be compared.
  If (objRegExp.Test(myString) = True) Then

   'Get the matches.
   Set colMatches = objRegExp.Execute(myString)  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Pero no como el que me mostraste de ejemplo. Seguro que como nunca programé en Visual Basic me estoy comiendo algo :mrgreen:

Muy bueno, que siempre responden pronto y bien explicado. Saludos :wink:
Última edición por explorer el 2009-09-12 14:32 @647, editado 1 vez en total
Razón: Ortografía, sintaxis, coloreado de código
Anthares
Perlero nuevo
Perlero nuevo
 
Mensajes: 26
Registrado: 2007-04-30 07:18 @346

Re: expresiones regulares VB uso $1

Notapor explorer » 2009-09-12 14:29 @645

Se me ha ocurrido una cosa... hacer el mismo programa del ejemplo anterior pero en Perl, para ver las diferencias.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use 5.010;
  3.  
  4. my $EmailRegex = qr"(?<user>[^@]+)@(?<host>.+)";
  5.  
  6.  
  7. if (@ARGV) {
  8.     $S = $ARGV[0];
  9. }
  10.  
  11. if ($S =~ /$EmailRegex/) {
  12.     say "User: " . $+{user};
  13.     say "Host: " . $+{host};
  14. }
  15. else {
  16.     say "$S no es una dirección de correo válida";
  17. }
  18.  
  19. say '';
  20. say 'Presione <ENTRAR> para salir...';
  21. <STDIN>;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Y ahora veamos unas comparaciones...
Tamaño de los programas
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Perl:               VB:
    22  líneas        24  líneas
    54  palabras      65  palabras
    232 caracteres   611  caracteres
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Se ve muy claro que, aún teniendo casi el mismo número de líneas y palabras, las de VisualBasic son más del doble de largas... hay que escribir mucho :)

Como no tengo Windows, no sé el tamaño de la máquina virtual de .Net. El intérprete de Perl en mi sistema ocupa 1,6Mb.

El programa en VBasic necesita cargar una librería externa, mientras que en Perl, las expresiones regulares están ya incluidas.

También desconozco el tamaño del ejecutable generado en .Net, pero en Perl sí que lo sé: es igual al del programa: 232 caracteres.

En cuanto a las herramientas de desarrollo, en mi empresa se gastan 600€/año por 5 licencias de Visual Studio. Yo he usado el joe, que viene incluido en casi todas las distribuciones Linux. Coste: 0€/año.

En cuanto al sistema operativo, un Windows normalito está a partir de 35€, mientras que mi Linux me ha costado 7€ (aunque me lo podía haber bajado de Internet a un costo menor).

Sí... definitivamente sigo con Perl :)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: expresiones regulares VB uso $1

Notapor Anthares » 2009-09-12 14:36 @650

Si yo opino lo mismo, Perl es lo mejor, pero bueno, me tocó Basic :evil: y la tengo que remar :roll:

PD: ya sé por qué tu código no me lo toma mi Visual Studio: porque ese código usa .NET pero yo tengo que hacerlo sin ella, solo Visual Basic pelado y le agregué las referencias a VBscript.

En fin... a remar con vb.

Saludos :mrgreen:
Anthares
Perlero nuevo
Perlero nuevo
 
Mensajes: 26
Registrado: 2007-04-30 07:18 @346

Re: Expresiones regulares en VB

Notapor explorer » 2009-09-12 20:31 @896

Pues entonces tienes un problema... Ese lenguaje ya no está soportado por Microsoft desde el 4 de abril del 2008.

Es lo malo de depender de una empresa... te pueden dejar con el culo al aire cuando les de la gana.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Programación en general

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados