TL; DR:
Используя Pattern.UNIX_LINES
, вы указываете Java движку регулярных выражений, что он соответствует .
любому символу, кроме символа новой строки, LF. Использование
Pattern pattern = Pattern.compile(currentCodeLinePattern, Pattern.UNIX_LINES);
В вашей жестко запрограммированной строке у вас есть только новые строки, LF-окончания, в то время как ваши issueBody
, скорее всего, содержат \r\n
, CRLF-окончания. Ваш шаблон соответствует только одному несловесному символу с \W
(см. \\W\\`{3}
часть шаблона), но CRLF состоит из двух несловарных символов. По умолчанию .
не соответствует символам разрыва строки, поэтому не соответствует ни \r
, CR, ни \n
, LF. \(Line #%s\).*\W\`{3}
неверно из-за этого:
\(Line #%s\)
- соответствует `(строка #) .*
- соответствует 0 или более символов, отличных от любого символа разрыва строки (до CR или CRLF) \W
- соответствует символу, отличному от буквы / цифры / _
(так, только \r
или \n
) \`{3}
- 3 метки - они совпадают только в том случае, если был конец \n
, а не \r\n
(CRLF).
Опять же, используя Pattern.UNIX_LINES
, вы сообщите Java regex engine, чтобы он совпадал с .
любым символом, кроме новой строки, LF.
BTW, Pattern.MULTILINE
только делает ^
совпадением в начале каждой строки и $
для совпадения в конце каждой строки, и поскольку в вашем шаблоне нет ни ^
, ни $
, вы можете смело отказаться от этой опции.