Обновить

Ваш худший кошмар, или простой regex, который удивит даже опытных программистов.

re.match(r"^abc$", "abc\n") # python
/^abc$/.test("abc\n") // Javascript
preg_match("/^abc$/", "abc\n"); // PHP

Не читайте дальше, попробуйте угадать какой вывод будет у каждого из вариантов?

False?

True ?

Правильный ответ:

False
True
False

Живите с этим :)

Всё дело в том, что в PCRE $ означает не "конец строки", а "конец строки, или позиция перед \n в конце строки". А в ECMAScript это не так.

Лично я думал, что должно быть False, но регулярные выражения продолжают меня удивлять спустя много лет.

Правильный regex для точного совпадения с концом строки:

re.match(r"^abc\Z", "abc\n")
// javascript идеален, нечего исправлять :)
preg_match("/^abc\p/", "abc\n")

== false

Теги:
Всего голосов 10: ↑7 и ↓3+8
Комментарии3

Рой агентов OpenAI взломал еще один внешний сервис – RubyGems

Это уже становится немного смешным (нет), но поток новостей о новых проделках роя нейронок OpenAI в мае-июле не прекращается – буквально каждую неделю мы узнаем об этом что-то новое. Причем, сама компания предпочитает эти инциденты замалчивать – но тут уж поможет начавшееся расследование от Сената США.

Рой агентов OpenAI взломал еще один внешний сервис – RubyGems

Публикации