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.