Pattern matching


Hi,

 I have a variable like this,
$var_name = "AA first BB second AA third BB fourth AA 5th BB";
I want to read the characters between 'AA' and 'BB' ie., (first, third, 5th).

[The number of AA-BB combinations is not defined.]

How do I do this?
leoleoAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
mrachowConnect With a Mentor Commented:
Try minimal matching (achieved by this extra '?':
@arrMic = $var_name =~ /AA(.*?)BB/g;
0
 
PC_User321Commented:
$var_name = "AA first BB second AA third BB fourth AA 5th BB";
@Bits = split /AA|BB/, $var_name;
foreach $Chunk (@Bits) {
   print "$Chunk\n";
}
0
 
PC_User321Commented:
$var_name = "AA first BB second AA third BB fourth AA 5th BB";
@Bits = split /AA|BB/, $var_name;
foreach $Chunk (@Bits) {
   print "$Chunk\n";
}
0
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

 
PC_User321Commented:
Hey, it got posted twice (and its not perfect).

I have now reread the question, and here is the right answer:

$var_name = "AA first BB second AA third BB fourth AA 5th BB";
@Bits = split /BB/, $var_name;
foreach $Chunk (@Bits) {
   ($Bad, $Good) = split /AA/, $Chunk;
   print "$Good\n";
}
0
 
PC_User321Commented:
Cunning, mrachow
0
 
leoleoAuthor Commented:

Thanks, PC_User321 & mrachow. Both the solns worked.
0
 
alien_life_formCommented:
Greetings.

@ the very least, I would use /\bAA\b/ and /\bBB\b/ as splitters. These will work assuming your fields do not contain AA or BB isolated by non word characters.

The proposed solution does not work on, for instance:

AA ABBA BB ...


OTOH, if a separator can be a valid field value, no amount of regexp will do, and you have to resort to more detailed parsing.

Cheers,
  alf

 
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.