Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Portierung Perl nach Delphi - Problem mit Regular Expression (https://www.delphipraxis.net/148629-portierung-perl-nach-delphi-problem-mit-regular-expression.html)

mischerr 5. Mär 2010 10:51


Portierung Perl nach Delphi - Problem mit Regular Expression
 
Hallo.

Ich bin kein Perl-User, muss aber eine Perl-Funktion in Delphi abbilden die eine RegEx nutzt mit der ich ein Verständnissproblem habe.

Hier der Auszug der Perl Funktion:
Code:
my $num = $_[0]; // Übergebener Parameter: Ein Integer 0..max(integer)
my @parts;
my $count = 0;
my $part;
if ($num =~ m/001(\d{3})$/x) {
  $num =~ s/00(1\d{3})$//x;
  $part = $1;
  unshift @parts, [ $part, $count ];
  $count += 2;
}
Es geht hier um die Ausdrücke "m/001(\d{3})$/x" und "s/00(1\d{3})$//x". :glaskugel:

Erster scheint zu prüfen, ob im übergebenem Integer als Text die Sequenz "001xxx" vorkommt und wenn ja, dann hält $1 die gefunden Sequenz!? :gruebel:
Zweiter scheint die gefundene Sequenz aus $num zu löschen. Aber warum "s/00(1\d{3})$//x" und nicht "s/001(\d{3})$//x"!? :gruebel:

Ist zufällig jemand fit in dem Thema?

himitsu 5. Mär 2010 10:58

Re: Portierung Perl nach Delphi - Problem mit Regular Expres
 
Ich denke mal es dürfte egal sein,
jedenfalls wird beim 2. Ausdruck die 1 mit zum Ergebnis gezählt.
Also dürfte es m/00(1\d{3})$/x) so dann wohl besser aussehn/zusammenpassen.

Zitat:

Zitat von mischerr
Aber warum "s/00(1\d{3})$//x" und nicht "s/001(\d{3})$//x"!? :gruebel:


(1\d{3}) = die "1" steht mit in $1
und bei 1(\d{3}) steht die "1" nicht mit in $1 drin.

mischerr 5. Mär 2010 13:55

Re: Portierung Perl nach Delphi - Problem mit Regular Expres
 
Danke, ich denke ich hab's nun verstanden.

Musste jedoch Perl usw. installieren und mit der PerlIDE ein wenig debuggen weil es mir nicht klar war, das die Zuordnung nach $1 in der =~ Auswertung der RegEx per \d{3} von rechts nach links läuft... :angel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz