[Buffalo-pm] regexp returning count of pattern.

John Macdonald john at perlwolf.com
Tue Jan 17 10:09:13 PST 2006


On Tue, Jan 17, 2006 at 01:03:58PM -0500, John Macdonald wrote:
> On Tue, Jan 17, 2006 at 12:26:42PM -0500, Josh Johnson wrote:
> > I need a way to get the count of a pattern being matched. I can make up an elaborate function to do this but I wondered if perl had something built in I could use. For example, say I have the string:
> > 
> > $string = 'abcdeeeeeefgheeeeijk';
> > 
> > I'd like to replace it with something like:
> > 
> > 'abcdE=6fghE=4ijk'
> > 
> > Is there any way I can get a regexp to return the number of times that a parameter was matched?
> 
> (warning: untested)
> 
>     $string =~ s/(([a-z])\1+)/"\U$1=".length($2)/ge;
> 
> matches a lowercase letter as the first part <<([a-z])>>,
> repeated at least one more time <<\1+>>.  The replacement is
> eval'ed to uppercase the character <<"\U$1=" and compute the
> number of total matches <<length($2)>>.  The e flag causes
> the eval, and the g flag repeats the substitution as often as
> possible in the original string.

By the way, your encoding is potentially ambiguous if you want
to be able to recreate the original input string and the input
string might contain digits.

"aa1" -> "A=21"
"aaaaaaaaaaaaaaaaaaaaa" -> "A=21"


-- 


More information about the Buffalo-pm mailing list