Returning the Match
Now things get interesting. What if we want pull something out of a string ? So far all we have done is test for truth, that is say yea or nay if a string matches, but not return what we found. Run this:
$_='My email address is <Robert@NetCat.co.uk>.'; /(<robert\@netcat.co.uk>)/i; print "Found it ! $1\n";
Firstly, note the single quotes when
is assigned. If there were double quotes, we'd need
\@ instead of
Remember, double quotes
"" allow variable interpolation, so Perl looks for an
@NetCat which does not exist.
Secondly, look at the parens around the entire regex. If you use parens, a side effect
is that the first match is put into a variable called
We'll get to the main effect later. The second match goes into
and so on. Also note that the
been escaped, so perl doesn't think it is an array. Remember
either escapes a special character, or gives a special meaning. Think of it
as Superman's telephone box. Imagine Clark Kent walking around with his magic partner Back
Notice how we specify in the regex case-insensitivity with
and the regex returns the case-sensitive string - that is, exactly
what it found.
Try the regex without parens. Then try this one:
You can put the parens anywhere. More or less. Now, run this :
$_='My email address is <Robert@NetCat.co.uk>.'; /<(robert)\@(netcat.co.uk)>/i; print "Found it ! $1 at $2\n";
See, you can have more than one ! Look at the above regex. Looks easy now, don't you think ? What about five minutes ago ? It would have looked like a typing mistake ! Well, there are some hairier regex to come, but you'll have a good barber.