Ваш худший кошмар, или простой regex, который удивит даже опытных программистов.
re.match(r"^abc$", "abcn") # python
/^abc$/.test("abcn") // Javascript
preg_match("/^abc$/", "abcn"); // PHP
Не читайте дальше, попробуйте угадать какой вывод будет у каждого из вариантов?
False?
True ?
Правильный ответ:
False
True
False
Живите с этим 🙂
Всё дело в том, что в PCRE $ означает не «конец строки», а «конец строки, или позиция перед n в конце строки». А в ECMAScript это не так.
Лично я думал, что должно быть False, но регулярные выражения продолжают меня удивлять спустя много лет.
Правильный regex для точного совпадения с концом строки:
re.match(r"^abcZ", "abcn")
// javascript идеален, нечего исправлять :)
preg_match("/^abcp/", "abcn")
== false