Title: Counting matches
Артем Аветисян wrote, on Fri 11-Nov-05 11:06
: I have:
: ...
: $string =<<'EOS';
: Returns the offset of where the last m//g search left off for the variable in question
: ($_ is used when the variable is not specified). Note that 0 is a valid match offset,
: while undef indicates that the search position is reset (usually due to match failure,
: but can also be because no match has yet been performed on the scalar). pos directly
: accesses the location used by the regexp engine to store the offset, so assigning to pos
: will change that offset, and so will also influence the \G zero-width assertion in regular expressions.
: Because a failed m//gc match doesn't reset the offset, the return from pos won't change either in this case.
: See the perlre manpage and the perlop manpage.
: EOS
:
: $string =~ /o.{2}(s)(et)/g;
: ...
:
: But i don't see the way to get all mathces (without having $string cycled).
: Secong issue - to get them with their positions.

How about this (untested):
 
my @positions;
while ($string =~ /o.{2}(s)(et)/g)
{
    push @positions, pos($string) - length($&);
}
 
Then the number of matches is simply scalar(@positions).
 
If you have a lot of work to do with regexes, I recommend _Mastering Regular Expressions_ by Jeffrey E. F. Friedl. It is my first reference for all questions regexish, and where I went to check the return values of the global (/g) match in list v. scalar context.
 
Good luck,
 
Joe
 

==============================================================
          Joseph P. Discenza, Sr. Programmer/Analyst
               mailto:[EMAIL PROTECTED]
 
          Carleton Inc.   http://www.carletoninc.com
          574.243.6040 ext. 300    fax: 574.243.6060
 
Providing Financial Solutions and Compliance for over 30 Years
 
_______________________________________________
Perl-Win32-Users mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to