• Publicidad

Una expresión regular milagrosa en Delphi

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

Una expresión regular milagrosa en Delphi

Notapor BigBear » 2013-08-24 21:01 @917

Hola. Se me está dificultando el tema del uso de JSON en Delphi por lo que tengo que recurrir a mi última chance hacerlo a mano, hacer como 15 expresiones regulares diferentes, pero me di cuenta de que el resultado JSON deja un patrón no tan difícil. El resultado es este:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
{"scans": {"eSafe": {"detected": false, "version": "-", "result": null, "update": "-"}, "McAfeeBeta": {"detected": false, "version": "-", "result": null, "update": "-"}, "CAT-QuickHeal": {"detected": true, "version": "-", "result": "(Suspicious) - DNAScan", "update": "-"}, "FortinetBeta": {"detected": false, "version": "-", "result": null, "update": "-"}, "McAfee": {"detected": true, "version": "-", "result": "Spam-SamBurg", "update": "-"}, "SAVMail": {"detected": false, "version": "-", "result": null, "update": "-"}, "TheHacker": {"detected": false, "version": "-", "result": null, "update": "-"}, "VirusBuster": {"detected": false, "version": "-", "result": null, "update": "-"}, "F-Prot": {"detected": false, "version": "-", "result": null, "update": "-"}, "Symantec": {"detected": false, "version": "-", "result": null, "update": "-"}, "Norman": {"detected": false, "version": "-", "result": null, "update": "-"}, "Avast": {"detected": false, "version": "-", "result": null, "update": "-"}, "PandaBeta": {"detected": false, "version": "-", "result": null, "update": "-"}, "ClamAV": {"detected": false, "version": "-", "result": null, "update": "-"}, "Kaspersky": {"detected": false, "version": "-", "result": null, "update": "-"}, "BitDefender": {"detected": false, "version": "-", "result": null, "update": "-"}, "F-Secure": {"detected": false, "version": "-", "result": null, "update": "-"}, "DrWeb": {"detected": false, "version": "-", "result": null, "update": "-"}, "AntiVir": {"detected": true, "version": "-", "result": "TR/Dropper.Gen", "update": "-"}, "Sophos": {"detected": true, "version": "-", "result": "Mal/EncPk-DJ", "update": "-"}, "FileAdvisor": {"detected": false, "version": "-", "result": null, "update": "-"}, "Authentium": {"detected": false, "version": "-", "result": null, "update": "-"}, "eTrust-Vet": {"detected": false, "version": "-", "result": null, "update": "-"}, "Prevx1": {"detected": false, "version": "-", "result": null, "update": "-"}, "Microsoft": {"detected": false, "version": "-", "result": null, "update": "-"}, "Ewido": {"detected": false, "version": "-", "result": null, "update": "-"}, "AVG": {"detected": false, "version": "-", "result": null, "update": "-"}, "AhnLab-V3": {"detected": false, "version": "-", "result": null, "update": "-"}, "VBA32": {"detected": false, "version": "-", "result": null, "update": "-"}, "Sunbelt": {"detected": false, "version": "-", "result": null, "update": "-"}, "Rising": {"detected": false, "version": "-", "result": null, "update": "-"}, "Ikarus": {"detected": false, "version": "-", "result": null, "update": "-"}, "Fortinet": {"detected": false, "version": "-", "result": null, "update": "-"}, "NOD32v2": {"detected": false, "version": "-", "result": null, "update": "-"}, "Panda": {"detected": false, "version": "-", "result": null, "update": "-"}, "Webwasher-Gateway": {"detected": true, "version": "-", "result": "Trojan.Dropper.Gen", "update": "-"}}, "scan_id": "2e45ba557712895c19c66159678f01283d64206823883068d579e55385d1f1c1-1209483679", "sha1": "0b5fd4cf8b019c660a3868d1c5f523c648348fec", "resource": "73f87db9a810e2725ff01fe2ad9759d4", "response_code": 1, "scan_date": "2008-04-29 15:41:19", "permalink": "https://www.virustotal.com/file/2e45ba557712895c19c66159678f01283d64206823883068d579e55385d1f1c1/analysis/1209483679/", "verbose_msg": "Scan finished, scan information embedded in this object", "total": 36, "positives": 5, "sha256": "2e45ba557712895c19c66159678f01283d64206823883068d579e55385d1f1c1", "md5": "73f87db9a810e2725ff01fe2ad9759d4"}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Teniendo en cuenta esto,

{"eSafe": {"detected": false, "version": "-", "result": null, "update": "-"}

Necesito sacar lo que está en negrita de toda la variable.

Intenté esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if($code=~/{"(.*)": {"detected": (.*), "version": (.*), "result": (.*), "update": (.*)}/) {
  2. print $1;
  3. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

En el código que mostré solo saco la primera línea pero en realidad estoy buscando sacar todas.

¿ Es posible hacer esto en una expresión regular en Perl ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Una expresión regular milagrosa en Delphi

Notapor explorer » 2013-08-24 22:36 @983

Sí, sí que es posible. Están dentro de los módulos JSON que hay en CPAN.

Pero si estás en Delphi, lo más cómodo es seguir con Delphi. En esta página, aparte de explicarte el formato JSON, hay enlaces a recursos para Delphi, incluyendo herramientas, componentes y un código de ejemplo de análisis y generación de JSON con Delphi.
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: Una expresión regular milagrosa en Delphi

Notapor BigBear » 2013-08-25 10:16 @469

Gracias por la ayuda, explorer, pero, ¿me podrías decir qué está mal en la expresión regular? Por que me parece raro por lo menos me debería salir una de las líneas, pero sale el texto completo como si lo hubiese hecho todo mal.

¿ Me podrías explicar ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Una expresión regular milagrosa en Delphi

Notapor explorer » 2013-08-25 11:04 @502

En Perl, desde luego, se hace muy fácil:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3. #use autodie;
  4. use File::Slurp;
  5. use JSON;
  6.  
  7. my $json_text   = read_file( 'code_35423.txt' );
  8. my $perl_scalar = decode_json( $json_text );
  9.  
  10. my %scans = %{ $perl_scalar->{'scans'} };
  11.  
  12. foreach my $scan ( keys %scans ) {
  13.  
  14.     say "Resultados de $scan";
  15.  
  16.     say "\tv$scans{$scan}->{'version'} ($scans{$scan}->{'update'})";
  17.     say "\tresultado: $scans{$scan}->{'result'}";
  18.     say "\tdetectado: $scans{$scan}->{'detected'}";
  19.  
  20. }
  21.  
  22. #use Data::Dumper;
  23. #say Dumper $perl_scalar;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Resultados de AntiVir
        v- (-)
        resultado: TR/Dropper.Gen
        detectado: true
Resultados de Avast
        v- (-)
        resultado:
        detectado: false
Resultados de Ikarus
        v- (-)
        resultado:
        detectado: false
Resultados de Webwasher-Gateway
        v- (-)
        resultado: Trojan.Dropper.Gen
        detectado: true
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
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: Una expresión regular milagrosa en Delphi

Notapor explorer » 2013-08-25 11:16 @511

Doddy escribiste:Por que me parece raro por lo menos me debería salir una de las líneas, pero sale el texto completo como si lo hubiese hecho todo mal.
Es por el uso de los abusones '.*'. Hay que usar más a los gentiles '.*?'.
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: Una expresión regular milagrosa en Delphi

Notapor BigBear » 2013-08-25 17:26 @768

Gracias por la ayuda, explorer, de todas formas terminé mis expresiones regulares "milagrosas". Dejo el código por si alguien necesita lo mismo.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!usr/bin/perl
  2.  
  3. my $code = '{"scans": {"eSafe": {"detected": false, "version": "-", "result": null, "update": "-"}, "McAfeeBeta": {"detected": false, "version": "-", "result": null, "update": "-"}, "CAT-QuickHeal": {"detected": true, "version": "-", "result": "(Suspicious) - DNAScan", "update": "-"}, "FortinetBeta": {"detected": false, "version": "-", "result": null, "update": "-"}, "McAfee": {"detected": true, "version": "-", "result": "Spam-SamBurg", "update": "-"}, "SAVMail": {"detected": false, "version": "-", "result": null, "update": "-"}, "TheHacker": {"detected": false, "version": "-", "result": null, "update": "-"}, "VirusBuster": {"detected": false, "version": "-", "result": null, "update": "-"}, "F-Prot": {"detected": false, "version": "-", "result": null, "update": "-"}, "Symantec": {"detected": false, "version": "-", "result": null, "update": "-"}, "Norman": {"detected": false, "version": "-", "result": null, "update": "-"}, "Avast": {"detected": false, "version": "-", "result": null, "update": "-"}, "PandaBeta": {"detected": false, "version": "-", "result": null, "update": "-"}, "ClamAV": {"detected": false, "version": "-", "result": null, "update": "-"}, "Kaspersky": {"detected": false, "version": "-", "result": null, "update": "-"}, "BitDefender": {"detected": false, "version": "-", "result": null, "update": "-"}, "F-Secure": {"detected": false, "version": "-", "result": null, "update": "-"}, "DrWeb": {"detected": false, "version": "-", "result": null, "update": "-"}, "AntiVir": {"detected": true, "version": "-", "result": "TR/Dropper.Gen", "update": "-"}, "Sophos": {"detected": true, "version": "-", "result": "Mal/EncPk-DJ", "update": "-"}, "FileAdvisor": {"detected": false, "version": "-", "result": null, "update": "-"}, "Authentium": {"detected": false, "version": "-", "result": null, "update": "-"}, "eTrust-Vet": {"detected": false, "version": "-", "result": null, "update": "-"}, "Prevx1": {"detected": false, "version": "-", "result": null, "update": "-"}, "Microsoft": {"detected": false, "version": "-", "result": null, "update": "-"}, "Ewido": {"detected": false, "version": "-", "result": null, "update": "-"}, "AVG": {"detected": false, "version": "-", "result": null, "update": "-"}, "AhnLab-V3": {"detected": false, "version": "-", "result": null, "update": "-"}, "VBA32": {"detected": false, "version": "-", "result": null, "update": "-"}, "Sunbelt": {"detected": false, "version": "-", "result": null, "update": "-"}, "Rising": {"detected": false, "version": "-", "result": null, "update": "-"}, "Ikarus": {"detected": false, "version": "-", "result": null, "update": "-"}, "Fortinet": {"detected": false, "version": "-", "result": null, "update": "-"}, "NOD32v2": {"detected": false, "version": "-", "result": null, "update": "-"}, "Panda": {"detected": false, "version": "-", "result": null, "update": "-"}, "Webwasher-Gateway": {"detected": true, "version": "-", "result": "Trojan.Dropper.Gen", "update": "-"}}, "scan_id": "2e45ba557712895c19c66159678f01283d64206823883068d579e55385d1f1c1-1209483679", "sha1": "0b5fd4cf8b019c660a3868d1c5f523c648348fec", "resource": "73f87db9a810e2725ff01fe2ad9759d4", "response_code": 1, "scan_date": "2008-04-29 15:41:19", "permalink": "https://www.virustotal.com/file/2e45ba557712895c19c66159678f01283d64206823883068d579e55385d1f1c1/analysis/1209483679/", "verbose_msg": "Scan finished, scan information embedded in this object", "total": 36, "positives": 5, "sha256": "2e45ba557712895c19c66159678f01283d64206823883068d579e55385d1f1c1", "md5": "73f87db9a810e2725ff01fe2ad9759d4"}';
  4.  
  5. $code=~s/{"scans"://;
  6.  
  7. while($code=~/"(.*?)": {"detected": (.*?), "version": (.*?), "result": (.*?), "update": (.*?)}/mig) {
  8. print $1.": $4\n";
  9. }
  10.  
  11. if($code=~/"scan_id": "(.*?)"/) {
  12. print "scan id : $1\n";
  13. }
  14.  
  15. if($code=~/"scan_date": "(.*?)"/) {
  16. print "scan date : $1\n";
  17. }
  18.  
  19. if($code=~/"permalink": "(.*?)"/) {
  20. print "permalink : $1\n";
  21. }
  22.  
  23. if($code=~/"verbose_msg": "(.*?)", "total": (.*?), "positives": (.*?),/) {
  24. print "$2/$3";
  25. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ya usé estas mismas exp. reg. en Delphi. Publicaría el proyecto pero este foro solo es de Perl :D
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818


Volver a Programación en general

¿Quién está conectado?

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