Schrift
[thread]9030[/thread]

RegEx: Ergebnis direkt greifen



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
pktm
 2007-05-24 20:10
#76882 #76882
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Wie geht das ncohmal in einer Zeile, dass ich das Ergebnis, welches ich mittels RegEx suche direkt bekomme?

Beispiel:
Code: (dl )
1
2
3
4
5
6
my $x = 'cbs.d';
my $endung = undef;
if( $file =~ m/\.([^\.]+)$/ ) {
   $endung = $1;
}
# verwende $endung...


Ich will aber sowas wie my $endung = $x =~ m/\.([^\.]+)$/;

Ich meine mich zu entsinnen, dass da was mit () war...

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Duff
 2007-05-24 21:08
#76883 #76883
User since
2006-10-06
283 Artikel
BenutzerIn

user image
So sollte es funktionieren:

Code: (dl )
1
2
3
4
5
6
7
8
9
my $x = 'cbs.d';
my $endung = undef;
if( $x =~ m/\.([^\.]+)$/ ) {
$endung = $1;
}
print "$endung\n";
# verwende $endung...
my ($endung2) = $x =~ m/\.([^\.]+)$/;
print "$endung2\n";


So sieht zumindestens das Resultat aus:
Code: (dl )
1
2
d
d
D'OH
Daniel
pktm
 2007-05-24 21:12
#76884 #76884
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ah, () um $endung! Das wars. Danke!
http://www.intergastro-service.de (mein erstes CMS :) )
pq
 2007-05-24 21:24
#76885 #76885
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
genau, das stichwort hier ist listenkontext. da ja eine regex potentiell
immer mehrere treffer zurückliefert, holt man sich diese, indem
man sie einem array/mehreren variablen zuweist.\n\n

<!--EDIT|pq|1180027485-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pktm
 2007-05-24 23:23
#76886 #76886
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Bei mehreren Treffern erhält man den letzten oder?
http://www.intergastro-service.de (mein erstes CMS :) )
Linuxer
 2007-05-24 23:38
#76887 #76887
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Nein, wenn ich mich recht entsinne, wird der erste Treffer dem Skalar zugeordnet. Die restlichen Treffer fallen unter den Tisch, weil keine Variable mehr da ist, die einen Treffer aufnehmen könnte.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
nepos
 2007-05-25 10:07
#76888 #76888
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
So sollte es sein, ja :)
pktm
 2007-05-25 11:13
#76889 #76889
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Aber wenn ich
Code: (dl )
1
2
my $x = '234';
my ($a) = $x =~ m/(\d)$/;


schreibe erhält $a den Wert "4".
http://www.intergastro-service.de (mein erstes CMS :) )
Linuxer
 2007-05-25 11:37
#76890 #76890
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Was soll es sonst enthalten?

4 ist der *einzige* Treffer!

Dein Regex findet eine Ziffer am Zeilen-/Stringende; und das ist die 4.

Lass das $ mal weg...

Code: (dl )
1
2
3
4
5
6
7
8
my $x = '234';
my ($a) = $x =~ m/(\d)/;

print $a, $/;


^D
2


http://perldoc.perl.org/perlretut.html
http://perldoc.perl.org/perlrequick.html
http://perldoc.perl.org/perlre.html\n\n

<!--EDIT|Linuxer|1180078774-->
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
bloonix
 2007-05-25 11:38
#76891 #76891
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=pktm,25.05.2007, 09:13]schreibe erhält $a den Wert "4".[/quote]
Ja klar, immerhin weist du die Regex an, am Ende des Strings nach einer
Zahl zu suchen. Hier mal ein paar Beispiele:

Code: (dl )
1
2
3
4
5
6
7
8
9
my $x = '234';
my $y = 'a234b';

print $x =~ m/(\d)$/; # liefert 4
print $x =~ m/^(\d)/; # liefert 2
print $y =~ m/(\d)$/; # liefert nichts, da am Ende des Strings keine Zahl ist
print $y =~ m/^(\d)/; # liefert nichts, da am Anfang des Strings keine Zahl ist
print $y =~ m/(\d)/;  # liefert die erste Zahl im String
print $y =~ m/(\d)/g; # liefert alle Zahlen im String
\n\n

<!--EDIT|opi|1180080351-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2007-05-24 20:10.