Here's a solution that uses a negative lookahead to find the ending boundaries of the '-' groupings.
use strict; use warnings; my $string = " ---------- ------------------------- -------- ---- + ------------------------- ----- ---- ----------- -----------"; print pos($string), "\n" while $string =~ m/-(?!-)/g;
I also toyed with m/-+/g, which works equally well, but must match the entire grouping of -'s before finishing each iteration. If the grouping is really long, that might be a little slower. The method I've provided just looks for boundaries, which seemed to be a good determination of the end of each grouping.
Oh, also, in the previously posted solutions, people were subtracting 1 from pos(), which gives the column of the final hyphen of each grouping. But your proposed sample output seems to be asking for the column immediately following the end of each grouping. The solution I provided returns the column following the end of each grouping, to match your sample output. If you intended otherwise, add that "-1" to the code.
Dave
In reply to Re: text parsing question
by davido
in thread text parsing question
by kfarr2
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |