A couple of useful features are the ability to pre-compile a regular expression, storing it in a variable for later use and the ability to use extended syntax to break the pattern up with whitespace and comments to make it more readable. Here is your pattern given such treatment.
my $rxLine = qr
{(?xs) # Use extended regular expression syntax (x)
# allowing whitespace in the pattern for
# readability, and comments. Allow the .
# (regexp wildcard metacharacter) to match
# a newline (s)
^ # Anchor pattern to start of string
( # Open capture group (1st)
[^{};]+ # Negated character class, anything except {, }
# or ; characters. + quantifier is 1 or more
# of, greedy matching so will match as many
# as possible
[{};] # Character class, any of {, } or ; characters.
# No quantifier so exactly 1 of
) # Close capture group (1st)
( # Open capture group (2nd)
\s* # Whitespace character. * quantifier is 0 or more
# of, greedy
\S+ # Non-whitespace character. 1 or more, greedy
.* # Any character (including newline because of the
# s modifier). 0 or more, greedy
) # Close capture group (2nd)
$ # Anchor pattern to end of string
};
if( $line =~ $rxLine )
{
# Do something here
}
Have a look at the documentation links provided by kennethk for explanations of things like character classes and greedy versus non-greedy quantifiers.
I hope this is helpful.
Cheers, JohnGG |