On May 10, 3:53 am, shlo...@iglu.org.il (Shlomi Fish) wrote: > Hi Thomas, > > a few comments on your code. > > On Monday 10 May 2010 13:45:53 Thomas Bätzler wrote: > > > > > Finalfire <blog.h...@gmail.com> asked: > > > Hello guys! I'm skilling regex using Perl and i've some trouble about > > > a simple try: > > > i've a string like: > > > > $string = "HELLOOOOAAABBCCCC"; > > > > and i want to manipulate in that way: HELL4O3ABB4C;You can simply > > > notice that when i have 3 or more occurrences of a character, i want > > > to substitute all the occurrences and write "nC" where n is how times > > > the character C is found on a string. > > > > So, in regex (i think there are so many way to do it but i wish to do > > > with regex, just skilling...) i write: > > > > $string =~ s/(.)\1\1+/$1/; > > > > but how can i get the number of the occurrences in the string of that > > > pattern? > > > #!/usr/bin/perl -w > > use warnings is preferable to the -w flag. > > > use strict; > > > my $string = "HELLOOOOAAABBCCCC"; > > > print "$string\n"; > > > $string =~ s/(.)\1{2,}/length($&).$1/eg; > > Please don't use $& as it slows down all subsequent regular expression matches > considerably. See the warning about it on perldoc perlvar. Instead wrap up the > entire match in an extra parentheses, like Shawn and I demonstrated. >
Only a problem, if you're doing tons of regexes within the program though. Even better, as of 5.10, the /p switch and ${^PREMATCH}, ${^MATCH}, and ${^POSTMATCH} eliminate the penalty: As a workaround for this problem, Perl 5.10.0 introduces "$ {^PREMATCH}", "${^MATCH}" and "${^POSTMATCH}", which are equivalent to $`, $& and $', except that they are only guaranteed to be defined after a successful match that was executed with the "/p" (preserve) modifier. The use of these variables incurs no global performance penalty, unlike their punctuation char equivalents, however at the trade-off that you have to tell perl when you want to use them. -- Charles DeRykus -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/