.* in regex basically means "catch everything until the end of input".
So, for simple strings, like
.* works perfectly. But if you have a string representing, for example, lines in a file, these lines would be separated by a line separator, such as
\n (newline) on Unix-like systems and
\r\n (carriage return and newline) on Windows.
By default in most regex engines,
. doesn't match newline characters, so the matching stops at the end of each logical line. If you want
. to match really everything, including newlines, you need to enable "dot-matches-all" mode in your regex engine of choice (for example, add
re.DOTALL flag in Python, or
/s in PCRE.