Schrift
[thread]13051[/thread]

Regular Expressions with Brackets

Tags: Ähnliche Threads

Leser: 2


<< >> 4 Einträge, 1 Seite
Gast Gast
 2009-01-26 11:44
#118328 #118328
Hallo liebe Leute,

ich such nach einem Ansatz für folgendes Problemchen:
In einer RegEx soll verschiedene Parameter ausgewertet werden. Diese können ja durch Klammerung iin den Perl-Internen $1..$xx landen. Soweit so gut. Problem ist, die Anzahl der gematchten Brackets kann variabel sein, sprich, ich weiß nicht, ob $5 der letzte Parameter ist oder $8.
Wie kann ich dies programmatisch rausfinden, oder gibt es etwa noch ein Perl-Internes Array, das ich nicht kenne??
Beispiel:
/\( \s*(\w+)\s* (?:,\s*(\w+)\s*)* \)/
Die Parameter so oder ähnlich werden eingegeben : ( a, b, c )
oder ( v, w, x, y )
Ergebnisse wären dann in $1,$2,$3 oder $1,$2,$3,$4.

Liebe Grüße,

Chris
renee
 2009-01-26 12:25
#118330 #118330
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Es gibt noch @+:

Code (perl): (dl )
1
2
3
4
5
6
7
#!/usr/bin/perl

use strict;
use warnings;

'Dies ist ein Test' =~ /(D).*?(t).*?(T)(e)/;
print $#+;
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/
Linuxer
 2009-01-26 12:46
#118333 #118333
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
Oder mit Array-Zuweisung arbeiten... damit erhält man auch die Anzahl der Klammer-Ergebnisse und man kann auch darüber zugreifen.

Code (perl): (dl )
1
2
3
if ( my @matches = $text =~ /\( \s*(\w+)\s* (?:,\s*(\w+)\s*)* \)/ ) {
  print "Funde: " . @matches;  # Anzahl Treffer
}
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!
Gast Gast
 2009-01-27 19:06
#118403 #118403
Ich sag Danke,

Grüße,
Chris.
<< >> 4 Einträge, 1 Seite



View all threads created 2009-01-26 11:44.