Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Regex-Problem

26 views
Skip to first unread message

Jan Schmidt

unread,
Jan 19, 2015, 11:23:15 AM1/19/15
to
Hallo NG,

ich müsste zwei Regex oder verknüpfen und anschließend eine Zahl
extrahieren. So wie $re1. Allerdings brauche ich das Ergebnis in $1
und nicht wie im Beispiel in $2.

Ich hab keine Idee, wie ich $re bauen soll, dass beide Teile matchen.

Kann mir jemand helfen?

Ausgabe:

re:
re1: 1152
re: 24
re1: 24

Prog:

use strict;

my$filelike = <<EOF;
42c: d9 aa 80 ef lea %sp,[%sp]-1152
0: 20 18 sub.a %sp,24
EOF

my$re;
#$re = qr/.*lea.*\[%sp\]-([0-9]{1,4})/o;
#$re = qr/.*sub\.a.*%sp,([0-9]{1,4})/o;
$re = qr/.*lea.*\[%sp\]-|.*sub\.a.*%sp,([0-9]{1,4})/;
my$re1 = qr/(.*lea.*\[%sp\]-|.*sub\.a.*%sp,)([0-9]{1,4})/;

open my $fh, '<', \$filelike or die $!;
while (<$fh>)
{
my$line = $_;
if ($line =~ m/$re/)
{
print "re: ".$1."\n";
}
if ($line =~ m/$re1/)
{
print "re1: ".$2."\n";
}
}
close $fh or die $!;

danke,
jan

ReneeB

unread,
Jan 20, 2015, 3:00:20 AM1/20/15
to
Hallo Jan,

Am Montag, 19. Januar 2015 17:23:15 UTC+1 schrieb Jan Schmidt:
> my$re1 = qr/(.*lea.*\[%sp\]-|.*sub\.a.*%sp,)([0-9]{1,4})/;


dafür gibt es die "non-capturing groups". Da nimmt man statt "()" einfach "(?:)". Damit werden die Treffer nicht in den $#-Variablen gespeichert. Also:

my $re1 = qr/(?:.*lea.*\[%sp\]-|.*sub\.a.*%sp,)([0-9]{1,4})/;

Um das ganze lesbarer zu machen würde ich noch den x-Modifier nehmen:

my $re1 = qr/
(?: # speichern des folgenden Ausdruckes ausschalten
.*lea.*\[%sp\]- | # entweder was mit "lea"
.*sub\.a.*%sp, # oder mit "sub"
)
([0-9]{1,4}) # matche die Zahl
/;

Jetzt hast Du die Zahl in $1

ReneeB

unread,
Jan 20, 2015, 3:01:46 AM1/20/15
to
Am Dienstag, 20. Januar 2015 09:00:20 UTC+1 schrieb ReneeB:
> Um das ganze lesbarer zu machen würde ich noch den x-Modifier nehmen:
>
> my $re1 = qr/
> (?: # speichern des folgenden Ausdruckes ausschalten
> .*lea.*\[%sp\]- | # entweder was mit "lea"
> .*sub\.a.*%sp, # oder mit "sub"
> )
> ([0-9]{1,4}) # matche die Zahl
> /;
>

Erst schreibe ich noch so schön, dass der x-Modifier hilft und dann vergesse ich das x...

my $re1 = qr/
(?: # speichern des folgenden Ausdruckes ausschalten
.*lea.*\[%sp\]- | # entweder was mit "lea"
.*sub\.a.*%sp, # oder mit "sub"
)
([0-9]{1,4}) # matche die Zahl
/x;

Jan Schmidt

unread,
Jan 21, 2015, 4:55:06 AM1/21/15
to
Am Dienstag, 20. Januar 2015 09:01:46 UTC+1 schrieb ReneeB:
> Am Dienstag, 20. Januar 2015 09:00:20 UTC+1 schrieb ReneeB:
> > Um das ganze lesbarer zu machen würde ich noch den x-Modifier nehmen:

danke, da verlieren ja die Regex jeglichen Schrecken ;-)
0 new messages