In short: the intent is it matches numbers that look like -1.2, 2.347, 47., -.58 and similar. Flag /g means global, that is to say match several times on the target variable $line, not only once. Read any book or tutorial on regex. There are also many Web sites that analyse and explain regex similar to the output below.
YAPE-Regex-Explain-4.01› perl examples/explain
\-?(?:\d+\.?\d*|\.\d+)
The regular expression:
(?-imsx:\-?(?:\d+\.?\d*|\.\d+))
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
\-? '-' (optional (matching the most amount
possible))
----------------------------------------------------------------------
(?: group, but do not capture:
----------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
----------------------------------------------------------------------
\.? '.' (optional (matching the most amount
possible))
----------------------------------------------------------------------
\d* digits (0-9) (0 or more times (matching
the most amount possible))
----------------------------------------------------------------------
| OR
----------------------------------------------------------------------
\. '.'
----------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------