Regular Expressions Regex Pitfalls Why doesn't dot (.) match the newline character ("\n")?


.* in regex basically means "catch everything until the end of input".

So, for simple strings, like hello world, .* 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.