Symbol ^ na początku oraz $ na końcu wskazują, że regex musi pasować do całego tekstu.
Drugi przykład, w przeciwieństwie do pierwszego, nie działa, ponieważ kropka może reprezentować dowolny znak z wyjątkiem nowej linii.
Dlatego regex przyjmie tylko te stringi, które składają się z jakiegoś ciągu znaków bez entera, następnie enter, następnie znowu ciąg znaków i kończy się enterem:
CIĄG ZNAKÓW - ENTER - CIĄG ZNAKÓW - ENTER
Z kolei dany przez ciebie ciąg znaków wygląda następująco:
CIĄG ZNAKÓW - ENTER - CIĄG ZNAKÓW - ENTER - CIĄG ZNAKÓW - ENTER - CIĄG ZNAKÓW - ENTER
A że jak napisałem na początku, regex musi pasować do całego tekstu przez użycie ^$, nic nie znajduje.
Pierwszy przykład zadziałał, ponieważ podkreślenie _ zostało uznane przez kropkę jako dowolny znak.
Możesz pobawić się tutaj:
https://regex101.com/
Zauważysz, że twój drugi przykład po usunięciu $ i/lub ^ zaczyna działać, i to na różne sposoby.