Звучит как ошибка.Самое большее, в многострочном режиме, «^» и «$» можно интерпретировать как сопоставление на внутренней границе линии.В Java, возможно, нет расширенной структуры переменных состояния, как в Perl.Я не знаю, является ли это даже причиной.
Тот факт, что /^test$/m
соответствует, просто доказывает работу ^ $ в многострочном режиме, за исключением случаев, когда строка пуста (в Java), но явноТест в режиме строки для пустой строки смешен, так как /^$/
работает для этого.
Тестирование в Perl, все работает как положено:
if ( "" =~ /^$/m ) { print "/^\$/m matches\n"; }
if ( "" =~ /^$/ ) { print "/^\$/ matches\n"; }
if ( "" =~ /\A\Z/m ) { print "/\\A\\Z/m matches\n"; }
if ( "" =~ /\A\Z/ ) { print "/\\A\\Z/ matches\n"; }
if ( "" =~ /\A\z/ ) { print "/\\A\\z/ matches\n"; }
if ( "" =~ /^/m ) { print "/^/m matches\n"; }
if ( "" =~ /$/m ) { print "/\$/m matches\n"; }
__END__
/^$/m matches
/^$/ matches
/\A\Z/m matches
/\A\Z/ matches
/\A\z/ matches
/^/m matches
/$/m matches