my $string = "abe[123955785ada]sdjdjajd";
if ( $string =~ /\[(.*?)\]/ )
{
my $inside = $1;
print $inside, "\n";
}
The string inside the brackets is in $inside.
The ( and ) around the .*? are "grouping parentheses";
they tell perl's regular expression engine to capture whatever
it matches between them and store it in a special variable.
The variable name will be a digit corresponding to the
parenthesis group — $1 for the first group,
$2 for the second group, etc. —
counting '('s from the left.
So, in this case, perl captures what it finds between the
[ and ] and stores that string in $1.
And what does it match? In this case, we've told it to
match any character ("."), repeated 0 or more times ("*"),
in a non-greedy manner ("?"). This last is best illustrated
by example.
Say your original string was
"aslkj[2099asgjskjw]asljgn[awoeiwj]"
There are two sets of [/]-delimited strings in there.
Without the "?" in the regular expression, perl would match from
the first [ to the last ], putting the following
into $1:
2099asgjskjw]asljgn[awoeiwj
Most likely, this isn't what you want, so we put in the
non-greedy modifier to make perl do what you want.
By the way, I said that "." matches any character; this
isn't strictly true. It usually doesn't match carriage
returns; if you want it to match carriage returns as well, add
the /s modifier at the end of the regular expression.
For more information, see perlre. It explains all of this and more.
|