Прежде всего, exampledepot.com - чрезвычайно плохой сайт: никогда никогда не допускайте, чтобы что-то там было «истиной».
В регулярном выражении $
никогда не соответствует символу, оно соответствует позиции. В режиме (?m)
это соответствует «пустой строке» перед разрывом строки или концом строки. Поэтому, учитывая строку "abc\r\ndef"
, регулярное выражение ".*abc$.*"
не совпадает, поскольку \r\n
отсутствует в вашем регулярном выражении. $
соответствует положению между c
и \r
.
Что вы должны сделать, это:
System.out.println("abc\r\ndef".matches(".*abc$\r\n.*")); // false
System.out.println("abc\r\ndef".matches("(?m).*abc$\r\n.*")); // true