Может кто-нибудь объяснить это поведение?
Я сопоставляю строку с шаблоном в 3 разных случаях.
Случай 1: В Java
Pattern pattern = Pattern.compile("^(b8|a8|8d){1,1}$"); #A dummy pattern
Matcher matcher = pattern.matcher("a8\n"); #A dummy string
boolean result = matcher.matches();
#result is false, which is expected
Случай 2: В JavaScript
var str = "a8\n";
var patt = /^(b8|a8|8d){1,1}$/g;
var result = str.match(patt);
#result prints nothing, again it's expected
Однако
Случай 3: (grep in bash )
[test@th3]$ grep -E '^(b8|a8|8d){1,1}$' <( printf 'a8\n'; )
a8
[test@th3]$
# it matches the 'a8'
В этом вопросе кто-то ответил, что $
представляет конец строки в REGEX
, поэтому grep соответствует '\n'
в случае 3, но почему не в другие случаи?