$text_1 = "abc\nd";
$text_1 =~ m/.*(.|\n)/;
...
Should print d
A narration of m/.*(.|\n)/ might be:
-
.* From the start of the string, grab as much as possible of anything that's not a newline (no /s modifier for dot);
-
(.|\n) Then match and capture the first thing that's either not-a-newline or a newline.
Looked at this way, the only thing that could possibly be captured in the given string would be a newline.
Indeed, if your regex has no operator introduced after Perl version 5.6, this kind of narration is what YAPE::Regex::Explain will give you:
c:\@Work\Perl\monks>perl -wMstrict -le
"use YAPE::Regex::Explain;
print YAPE::Regex::Explain->new(qr/.*(.|\n)/)->explain();
"
The regular expression:
(?-imsx:.*(.|\n))
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):
----------------------------------------------------------------------
.* any character except \n (0 or more times
(matching the most amount possible))
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
. any character except \n
----------------------------------------------------------------------
| OR
----------------------------------------------------------------------
\n '\n' (newline)
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
(There are newer and better regex parser/explainers around, but I like this one, limited as it is, for its explanatory style.)
Give a man a fish: <%-{-{-{-<
|