Schrift
[thread]7934[/thread]

RegEx: $1,$2,$3,...,$n in ein Array



<< >> 10 Einträge, 1 Seite
Matze
 2006-05-01 17:56
#65430 #65430
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich hole mir eine RegularExpression in der natürlich auch Ausdrücke
in Klammern vorkommen in meine Funktion.
Nun möchte ich, dass die Variablen $1,$2,$3,...,$n zurück-gegeben
werden.
Leider ist die Zahl der Variablen unbgrenzt(man kann unendlich
viele Klammern schreiben). Und ich würde gerne wissen, ob ich
vielleicht die Variablen irgendwie in ein Array bekomme, oder ob
es anders möglich wäre sie alle zurückzugeben.
Die Anzahl der $1...$n hole ich mir auch:

Mein Versuch:
Code: (dl )
1
2
3
4
5
# $last = n aus $n

for my$i (1..$last) {
  push(@arr,${$i});
}


MfG. Matze
Mit freundlichen Grüßen: Matze
pq
 2006-05-01 18:10
#65431 #65431
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
wenn du alle gematchten ausdrücke in einem array haben willst, warum
machst du das nicht gleich beim matchen?
Code: (dl )
1
2
3
4
5
6
$ perl -wle'$_="test";
my @array = m/(\w)(e)(.)/;
print for @array'
t
e
s
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
Matze
 2006-05-01 18:25
#65432 #65432
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke!
Das hat funktioniert.

MfG. Matze
Mit freundlichen Grüßen: Matze
betterworld
 2006-05-01 19:30
#65433 #65433
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Auch wenn das Problem schon geloest ist, moechte ich noch die eigentliche Frage beantworten:
Code: (dl )
1
2
3
4
5
6
7
8
use Data::Dumper;
my $var = "hallo";
$var =~ /(.)(..)(.)/ or die;
my @array;
for (1..$#+) {
push @array, substr($var, $-[$_], $+[$_] - $-[$_]);
}
print Dumper \@array;
murphy
 2006-05-02 00:16
#65434 #65434
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
@betterworld: Hässlicher geht's nicht mehr, oder? Aber ich hätte da noch einen Verbesserungsvorschlag: Statt
Code: (dl )
substr($var, $-[$_], $+[$_] - $-[$_])
könnte man auch
Code: (dl )
${$_}
schreiben, strict benutzt dein Beispiel ja sowieso nicht ;-)
When C++ is your hammer, every problem looks like your thumb.
betterworld
 2006-05-02 03:49
#65435 #65435
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=murphy,01.05.2006, 22:16]@betterworld: Hässlicher geht's nicht mehr, oder? Aber ich hätte da noch einen Verbesserungsvorschlag: Statt
Code: (dl )
substr($var, $-[$_], $+[$_] - $-[$_])
könnte man auch
Code: (dl )
${$_}
schreiben, strict benutzt dein Beispiel ja sowieso nicht ;-)[/quote]
${$_} bedeutet Dereferenzieren von $_. Aber in meinem Code ist $_ keine Referenz. Liegt nicht vielleicht ein Missverständnis vor?

Ferner ist mein Code strict-konform, ich habe bloß "use strict" der Uebersichtlichkeit zuliebe weggelassen.

Code: (dl )
Hässlicher geht's nicht mehr, oder?
Sorry, aber ich wuesste wirklich keine andere Moeglichkeit, um an $1, $2, etc. ohne eval und ohne zu wissen, wie viele es sind, heranzukommen.
betterworld
 2006-05-02 03:55
#65436 #65436
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=betterworld,02.05.2006, 01:49]ich wuesste wirklich keine andere Moeglichkeit, um an $1, $2, etc. ohne eval und ohne zu wissen, wie viele es sind, heranzukommen.[/quote]
Korrigiere: ohne eval und symbolische Referenzen.

Jetzt habe ich verstanden, was Du mit ${$_} meinst. (Ich hätte es probieren sollen, bevor ich antworte...) Du hast natuerlich Recht, nur wie Du selber schon sagst, ist das nicht strict-konform.\n\n

<!--EDIT|betterworld|1146528540-->
Matze
 2006-05-03 17:49
#65437 #65437
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
@betterworld: Danke für deine Antwort!
Was steht denn in den Variablen @- und @+ sonst noch so drin ?
Oder sind es nur spezial Variablen für RegEx ?

MfG. Matze
Mit freundlichen Grüßen: Matze
renee
 2006-05-03 19:43
#65438 #65438
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Die Erklärung für solche Variablen findest Du in perlvar.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Matze
 2006-05-04 17:04
#65439 #65439
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke renee!
Mit freundlichen Grüßen: Matze
<< >> 10 Einträge, 1 Seite



View all threads created 2006-05-01 17:56.