Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7832[/thread]

regex: Auftreten von Zeichen zählen

Leser: 7


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
tribbiani
 2006-03-27 19:49
#64109 #64109
User since
2006-01-27
17 Artikel
BenutzerIn
[default_avatar]
Hi,

Wie kann ich das Auftreten von einem bestimmten Zeichen zählen?
z.B. die quotes in:
key2="val1","val2","val3"
Taulmarill
 2006-03-27 20:04
#64110 #64110
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Code: (dl )
1
2
3
my $foo = q!key2="val1","val2","val3"!;
my $bar = () = $foo =~ m/"/g;
print "$bar\n";


der trick mit dem = () = bewirkt, dass der reguläre ausdruck im listenkontext steht, damit gibt er alle gematchten einträge zurück, anstatt nur wahr oder falsch zurück zu geben. da der scalar $bar die temporär erzeugte liste dann wieder in scalaren kontext setzt, bekommt $bar die anzahl der elemente.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Dubu
 2006-03-28 00:24
#64111 #64111
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Wenn es nur um ein einzelnes Zeichen geht, ist tr/// aber schneller und einfacher:
Code: (dl )
1
2
3
my $foo = q!key2="val1","val2","val3"!;
my $bar = $foo =~ tr/"/"/;
print "$bar\n";
tribbiani
 2006-03-28 13:20
#64112 #64112
User since
2006-01-27
17 Artikel
BenutzerIn
[default_avatar]
Besten Dank! :)
pq
 2006-03-29 12:44
#64113 #64113
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Dubu,27.03.2006, 22:24]
Code: (dl )
my $bar = $foo =~ tr/"/"/;
[/quote]
Code: (dl )
my $bar = $foo =~ tr/"//;

das zweite " ist hier überflüssig. du willst ja gar nichts ersetzen.
B::Deparse sagt das auch...
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
Relais
 2006-03-29 13:08
#64114 #64114
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=pq,29.03.2006, 10:44][quote=Dubu,27.03.2006, 22:24]
Code: (dl )
my $bar = $foo =~ tr/"/"/;
[/quote]
Code: (dl )
my $bar = $foo =~ tr/"//;

das zweite " ist hier überflüssig. du willst ja gar nichts ersetzen.
B::Deparse sagt das auch...[/quote]
Loeschen will er aber auch nix ... ;-)

$sky =~ tr/*/*/; # count the stars in the sky ist eben das klassische Beispiel.
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
renee
 2006-03-29 13:13
#64115 #64115
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da wird ja nix ersetzt (bzw. es wird durch [s]den gleichen Buchstaben[/s] das gleiche Zeichen ersetzt):
Code: (dl )
1
2
3
4
5
6
7
C:\Dokumente und Einstellungen\Renee>perl
my $string = "hallo'hallo'hallo";
my $var = $string =~ tr/'//;

print $string," - ",$var;
^D
hallo'hallo'hallo - 2
\n\n

<!--EDIT|renee|1143624148-->
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/
renee
 2006-03-29 13:18
#64116 #64116
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Aus perlop:
Quote
If the REPLACEMENTLIST is empty, the SEARCHLIST is replicated. This latter is useful for counting characters in a class or for squashing character sequences in a class.
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/
pq
 2006-03-29 14:28
#64117 #64117
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Relais,29.03.2006, 11:08][quote=pq,29.03.2006, 10:44]das zweite " ist hier überflüssig. du willst ja gar nichts ersetzen.
B::Deparse sagt das auch...[/quote]
Loeschen will er aber auch nix ... ;-)[/quote]
nee, tr/"// löscht ja auch nichts. versteh ich jetzt nicht, den einwand.
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
pq
 2006-03-29 14:35
#64118 #64118
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=renee,29.03.2006, 11:13]Da wird ja nix ersetzt (bzw. es wird durch [s]den gleichen Buchstaben[/s] das gleiche Zeichen ersetzt):
Code: (dl )
1
2
3
4
5
6
7
C:\Dokumente und Einstellungen\Renee>perl
my $string = "hallo'hallo'hallo";
my $var = $string =~ tr/'//;

print $string," - ",$var;
^D
hallo'hallo'hallo - 2
[/quote]
ja klar, was ich sagen will, ist: tr/"/"/ tut dasselbe wie tr/"//.
da finde ich letzteres besser, weil ich 2 mal tippen spare. und B::Deparse
macht aus ersterem letzteres.
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
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2006-03-27 19:49.