{"id":352745,"date":"2024-05-20T22:14:31","date_gmt":"2024-05-20T22:14:31","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=352745"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-20T22:14:31","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=352745","title":{"rendered":"<span>Regex engine internals as a library [full]<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440<\/h2>\n<p>\u042d\u0442\u043e \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 <strong>\u0431\u043e\u043b\u044c\u0448\u043e\u0439<\/strong> \u0438 <strong>\u0441\u043b\u043e\u0436\u043d\u043e\u0439<\/strong> \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code> \u0441\u0432\u0435\u0436\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043d\u0430\u0431\u0438\u0442\u044c \u0441\u043a\u0438\u043b\u043b \u0432 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c. \u041f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0439 \u0441\u0442\u0438\u043b\u044c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a \u043e\u043d\u043e \u0442\u0430\u043c \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e, \u0430 \u0432 \u043a\u043d\u0438\u0433\u0435 \u0424\u0440\u0438\u0434\u0434\u043b\u0430 \u0438\u043b\u0438 \u0432 \u043a\u043d\u0438\u0433\u0435 \u0434\u0440\u0430\u043a\u043e\u043d\u0430 \u0432\u044b \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439, \u0442\u043e \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c &#8212; \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e <strong>\u0438 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e<\/strong>.<\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0417\u043d\u0430\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u0432 (\u0437\u043d\u0430\u0442\u044c \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u0414\u041a\u0410 \u043e\u0442 \u041d\u041a\u0410)<\/p>\n<\/li>\n<li>\n<p>\u0418\u043c\u0435\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f \u043f\u043e \u044f\u0437\u044b\u043a\u0443 Rust<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u0449\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043f\u0440\u043e\u0448\u0443 \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0438 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430\u0445, \u0447\u0442\u043e\u0431\u044b \u044f \u043c\u043e\u0433 \u0438\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\"><a class=\"anchor\" name=\"toc\" id=\"toc\"><\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#brief_history\" rel=\"noopener noreferrer nofollow\">\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#problems\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#pr_composition\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#pr_testing\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#pr_niche_apis\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043d\u0438\u0448\u0435\u0432\u044b\u0435 API<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#pr_compiled_fsa\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0414\u041a\u0410<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#regex_cli\" rel=\"noopener noreferrer nofollow\">\u041f\u043e \u043f\u0443\u0442\u0438 \u0441 regex-cli<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#data_flow\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#lit_optimize\" rel=\"noopener noreferrer nofollow\">\u041b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#lit_motivation\" rel=\"noopener noreferrer nofollow\">\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#lit_extraction\" rel=\"noopener noreferrer nofollow\">\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#lit_search\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0438\u0441\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#nfa_data_type\" rel=\"noopener noreferrer nofollow\">\u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 &#8212; \u041d\u041a\u0410<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#nfa_simple_example\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u041d\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#nfa_sparse_state\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u041d\u041a\u0410: \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#nfa_utf8_minimal\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u041d\u041a\u0410: \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0434\u043b\u044f UTF-8<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#nfa_literal_trie\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u041d\u041a\u0410: \u0434\u0435\u0440\u0435\u0432\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#nfa_future_work\" rel=\"noopener noreferrer nofollow\">\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u041d\u041a\u0410<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#regex_engines\" rel=\"noopener noreferrer nofollow\">\u0414\u0432\u0438\u0436\u043a\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#eng_common\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u0441\u0435\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#eng_pikevm\" rel=\"noopener noreferrer nofollow\">\u0414\u0432\u0438\u0436\u043e\u043a: <code>PikeVM<\/code><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#eng_bb\" rel=\"noopener noreferrer nofollow\">\u0414\u0432\u0438\u0436\u043e\u043a: <code>BoundedBacktracker<\/code><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#eng_onepassfsa\" rel=\"noopener noreferrer nofollow\">\u0414\u0432\u0438\u0436\u043e\u043a: \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#eng_fsa\" rel=\"noopener noreferrer nofollow\">\u0414\u0432\u0438\u0436\u043e\u043a: \u0414\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#eng_lazy\" rel=\"noopener noreferrer nofollow\">\u0414\u0432\u0438\u0436\u043e\u043a: \u0433\u0438\u0431\u0440\u0438\u0434 \u041d\u041a\u0410\/\u0414\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#eng_meta\" rel=\"noopener noreferrer nofollow\">\u041c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#re2_diff\" rel=\"noopener noreferrer nofollow\">\u041e\u0442\u043b\u0438\u0447\u0438\u044f \u043e\u0442 RE2<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#testing\" rel=\"noopener noreferrer nofollow\">\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#benchmarking\" rel=\"noopener noreferrer nofollow\">\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438\u043d\u0433<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#costs\" rel=\"noopener noreferrer nofollow\">\u0426\u0435\u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#wrapup\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043b\u0435\u0442, \u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043b <a href=\"https:\/\/github.com\/rust-lang\/regex\/\" rel=\"noopener noreferrer nofollow\">\u043a\u0440\u0435\u0439\u0442 regex<\/a>, \u0447\u0442\u043e\u0431\u044b \u043b\u0443\u0447\u0448\u0435 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0451 \u043f\u0440\u043e\u0449\u0435 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c\u044e. \u041d\u0430 \u043f\u0443\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u044f \u0441\u043e\u0437\u0434\u0430\u043b \u043d\u043e\u0432\u044b\u0439 \u043a\u0440\u0435\u0439\u0442 <a href=\"https:\/\/github.com\/rust-lang\/regex\/tree\/master\/regex-automata\" rel=\"noopener noreferrer nofollow\"><code>regex-automata<\/code><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code> \u0432 \u0432\u0438\u0434\u0435 API. \u041d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u0437\u043d\u0430\u044e, \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u0434\u0430\u043b\u0435\u0435 &#8212; <strong>\u0440.\u0432.<\/strong>), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0451 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0442\u0435\u043f\u0435\u043d\u0438.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u0440\u0435\u0439\u0442\u0430, \u0438 \u043a\u0430\u043a \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u0440\u0435\u0448\u0435\u043d\u044b, \u0430 \u0442\u0430\u043a \u043f\u0443\u0442\u0435\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u043e API \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex-automata<\/code>.<\/p>\n<p><strong>\u0426\u0435\u043b\u0435\u0432\u0430\u044f \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u044f<\/strong>: \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u043d\u0430 Rust \u0438 \u0432\u0441\u0435, \u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0434\u043b\u044f \u0440.\u0432. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u044b\u0442 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0440.\u0432.<\/p>\n<p><a class=\"anchor\" name=\"brief_history\" id=\"brief_history\"><\/a><\/p>\n<h2>\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441<\/h2>\n<p>\u0412 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0435 2012, <a href=\"https:\/\/github.com\/rust-lang\/rust\/issues\/3591\" rel=\"noopener noreferrer nofollow\">\u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 Rust \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0442\u0438\u043a\u0435\u0442<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440.\u0432. \u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 Rust. \u041f\u043e\u0437\u0436\u0435 \u0413\u0440\u0435\u0439\u0434\u043e\u043d \u0425\u043e\u0430\u0440 (Graydon Hoare) <a href=\"https:\/\/github.com\/rust-lang\/rust\/issues\/3591#issuecomment-17009497\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043c\u0435\u0442\u0438\u043b\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0438<\/a>, \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u043b\u0438 RE2. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, <a href=\"https:\/\/github.com\/google\/re2\" rel=\"noopener noreferrer nofollow\">RE2<\/a> &#8212; \u044d\u0442\u043e \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442, \u0447\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u0430, \u0440\u0430\u0432\u043d\u043e\u0435 <code>O(m * n)<\/code>, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f Perl-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043a\u0430\u043a \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c. \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e RE2 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0435\u0433\u043e \u0430\u0432\u0442\u043e\u0440\u043e\u043c, \u0420\u0430\u0441\u0441\u043e\u043c \u041a\u043e\u043a\u0441\u043e\u043c (Russ Cox), \u0432 <a href=\"https:\/\/swtch.com\/~rsc\/regexp\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432. \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430<\/a>.<\/p>\n<p>\u0412 \u0430\u043f\u0440\u0435\u043b\u0435 2014, \u044f <a href=\"https:\/\/github.com\/rust-lang\/rust\/issues\/3591#issuecomment-39582811\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043c\u0435\u0442\u0438\u043b\u0441\u044f \u0432 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0438 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043d\u0430\u0434 \u0434\u0432\u0438\u0436\u043a\u043e\u043c \u0440.\u0432., \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u043c \u043a\u0440\u0435\u0439\u0442\u043e\u043c RE2<\/a>. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u041a\u043e\u043a\u0441\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0447\u0435\u0440\u0442\u0435\u0436\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440.\u0432. \u0412\u0441\u043a\u043e\u0440\u0435 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u044f <a href=\"https:\/\/github.com\/rust-lang\/rfcs\/pull\/42\" rel=\"noopener noreferrer nofollow\">\u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b RFC \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440.\u0432. \u0432 Rust Distribution<\/a>. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u0435\u0449\u0451 \u0434\u043e Rust 1.0 \u0438 \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 Cargo (\u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0430 \u043d\u0435 <a href=\"https:\/\/github.com\/rust-lang\/rust\/pull\/1149\" rel=\"noopener noreferrer nofollow\">\u043f\u0435\u0440\u0432\u043e\u0439<\/a>), \u0438 \u043f\u043e\u0434 &#171;Rust Distribution&#187; \u043f\u043e\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u044c <code>rustc<\/code>, <code>std<\/code> \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0432\u0441\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0432\u043c\u0435\u0441\u0442\u0435. \u042d\u0442\u043e\u0442 RFC \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code> \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u0442\u0438\u0445 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<\/p>\n<p>\u0414\u0435\u0441\u044f\u0442\u044c\u044e \u0434\u043d\u044f\u043c\u0438 \u043f\u043e\u0437\u0434\u043d\u0435\u0435, <a href=\"https:\/\/github.com\/rust-lang\/rfcs\/pull\/42#issuecomment-41104032\" rel=\"noopener noreferrer nofollow\">RFC \u0431\u044b\u043b \u043e\u0434\u043e\u0431\u0440\u0435\u043d<\/a>. \u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u044f <a href=\"https:\/\/github.com\/rust-lang\/rust\/pull\/13700\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043e\u0441\u043b\u0430\u043b pull request \u0432 <code>rust-lang\/rust<\/code><\/a>. \u0412\u0441\u0451 \u0431\u044b\u0441\u0442\u0440\u043e \u0437\u0430\u0432\u0435\u0440\u0442\u0435\u043b\u043e\u0441\u044c. \u041e\u0442\u043c\u0435\u0447\u0443 \u0442\u0430\u043a \u0436\u0435, \u0447\u0442\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u043d\u0430\u0437\u0432\u0430\u043b \u043a\u0440\u0435\u0439\u0442 <code>regexp<\/code>. \u0418 PR \u0432\u043a\u043b\u044e\u0447\u0430\u043b \u0432 \u0441\u0435\u0431\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0451\u0442\u0435 \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u043a \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044e \u0432 <code>regex<\/code>.<\/p>\n<p>\u0414\u0432\u0443\u043c\u044f \u0433\u043e\u0434\u0430\u043c\u0438 \u043f\u043e\u0437\u0436\u0435, \u0432 \u043c\u0430\u0435 2016, \u044f <a href=\"https:\/\/github.com\/rust-lang\/rfcs\/pull\/1620\" rel=\"noopener noreferrer nofollow\">\u043d\u0430\u043f\u0438\u0441\u0430\u043b RFC \u0441 \u0440\u0435\u043b\u0438\u0437\u043e\u043c <code>regex 1.0<\/code><\/a>. \u041e\u0434\u043e\u0431\u0440\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u044f\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432, \u043d\u043e <a href=\"https:\/\/github.com\/rust-lang\/regex\/pull\/471\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044f \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b <code>regex 1.0<\/code><\/a> \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u0441\u043f\u0443\u0441\u0442\u044f, \u0432 \u043c\u0430\u0435 2018.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0440\u0435\u043b\u0438\u0437\u043e\u043c <code>regex 1.0<\/code>, \u044f \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430\u0434 \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u0440\u0435\u0439\u0442\u0430. \u0418\u0437 <a href=\"https:\/\/github.com\/rust-lang\/regex\/commit\/715a8072890af65d2095d39f534b4b3dc4caeae2\" rel=\"noopener noreferrer nofollow\">\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0432 \u043c\u0430\u0440\u0442\u0435 2018<\/a>:<\/p>\n<blockquote>\n<p>\u041f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435 [regex-syntax] \u0434\u043e\u043b\u0436\u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0432 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u0440\u0435\u0439\u0442 regex.<\/p>\n<\/blockquote>\n<p>\u042f \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u043b, \u043a\u0443\u0434\u0430 \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u044f \u0434\u0432\u0438\u0433\u0430\u043b\u0441\u044f, \u043d\u043e \u0432 \u043c\u0430\u0440\u0442\u0435 2020 \u044f \u0432\u0441\u0435\u0440\u044c\u0451\u0437 \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0434 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f (the actual matching engines). \u0427\u0443\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u0442\u0440\u0451\u0445 \u043b\u0435\u0442 \u0441\u043f\u0443\u0441\u0442\u044f, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043a\u0440\u0435\u0439\u0442 <a href=\"https:\/\/github.com\/rust-lang\/regex\/blob\/master\/CHANGELOG.md#190-2023-07-05\" rel=\"noopener noreferrer nofollow\"><code>regex 1.9<\/code> \u0431\u044b\u043b \u0432\u044b\u043f\u0443\u0449\u0435\u043d<\/a>.<\/p>\n<p><a class=\"anchor\" name=\"problems\" id=\"problems\"><\/a><\/p>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b<\/h2>\n<p>\u0421 \u043a\u0430\u043a\u0438\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u0443\u0436\u0438\u043b\u0438 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f? \u0418 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0437\u0430\u0447\u0435\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u0440\u0435\u0439\u0442\u0430?<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043c \u0434\u043b\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f.<\/p>\n<p><a class=\"anchor\" name=\"pr_composition\" id=\"pr_composition\"><\/a><\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0421\u043b\u043e\u0436\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f<\/h3>\n<p>\u0421\u043b\u0435\u0434\u0443\u044f <a href=\"https:\/\/swtch.com\/~rsc\/regexp\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438 RE2<\/a>, <code>regex<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a. \u0418\u043d\u043e\u0433\u0434\u0430 \u0441\u0440\u0430\u0437\u0443 <em>\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e<\/em> \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u043f\u043e\u0438\u0441\u043a\u0430.<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u0442\u0443\u0442 \u0434\u0432\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438, \u0447\u0430\u0441\u0442\u043e \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443: \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0411\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0442\u0430\u043a \u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0443\u043c\u0435\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u043d\u043e \u043d\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u0430 (capture group) \u0432 \u0440.\u0432.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u043b \u043a\u0440\u0435\u0439\u0442, \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e (<code>PikeVM<\/code>), \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0434\u0443\u043c\u0430\u043b \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0438\u0432\u043d\u0435\u0441\u0442\u0438 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438. \u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u043d\u043e\u0432\u044b\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0431\u044b\u043b\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b:<\/p>\n<ul>\n<li>\n<p><code>BoundedBacktracker<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a \u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u043b \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430, \u043a\u0430\u043a \u0438 <code>PikeVM<\/code>, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e \u043e\u0442\u043a\u0430\u0442\u0430 (backtracking). \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 &#8212; \u043e\u0431\u044a\u0451\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 <code>O(m * n)<\/code>. \u0422\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u0430 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440.\u0432. \u0438 \u043e\u0431\u044a\u0451\u043c\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0430 (\u0442.\u043d. haystack, \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e &#171;\u0441\u0442\u043e\u0433 \u0441\u0435\u043d\u0430&#187;, \u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e &#171;\u0441\u0442\u043e\u0433&#187; &#8212; \u043f\u0440\u0438\u043c.). \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u043e &#8212; \u044d\u0442\u0430 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c <code>PikeVM<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0413\u0438\u0431\u0440\u0438\u0434 \u0414\u041a\u0410\/\u041d\u041a\u0410 (\u0414\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u041a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0430 (DFA) \u0438 \u041d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u041a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0430 (NFA)), \u0442\u0430\u043a \u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043a\u0430\u043a \u041b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 (&#171;lazy DFA&#187;), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e, \u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f. \u041e\u043d \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0433\u0440\u0443\u043f\u043f\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043b\u043e\u0432\u0435\u0441\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f, \u0433\u0434\u0435 \u0440.\u0432. \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u044f\u0437\u044b\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439, \u0438 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: <code>foo<\/code>, <code>foo{2}<\/code>, <code>foo|bar<\/code>, <code>foo[1-3]<\/code>. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u0438\u043b\u0438 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 (multi-substring) \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432. \u0432\u043e\u043e\u0431\u0449\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>(\u041c\u044b \u0443\u0437\u043d\u0430\u0435\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0438\u043c\u0435\u044e\u0442 \u044d\u0442\u0438 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u044b \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0431\u043b\u043e\u0433\u0435)<\/p>\n<p>\u0418 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u043c\u0438 \u043f\u0440\u0438\u0448\u043b\u0430 \u0438 \u0438\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f (\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f):<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430, \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <code>PikeVM<\/code> \u0438\u043b\u0438 <code>BoundedBacktracker<\/code>, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0435\u0434\u043a\u0438\u0435, \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u043c \u043b\u0435\u043d\u0438\u0432\u044b\u043c \u0414\u041a\u0410.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0440.\u0432. \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c\u0443 \u044f\u0437\u044b\u043a\u0443, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c <em>\u043f\u0440\u0435\u0444\u0438\u043b\u044c\u0442\u0440<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0449\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f (occurrences) \u0441 \u044d\u0442\u0438\u043c \u044f\u0437\u044b\u043a\u043e\u043c. \u041a\u0430\u0436\u0434\u043e\u0435 \u0442\u0430\u043a\u043e\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 <em>\u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0443 \u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435<\/em> \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u0440.\u0432. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e <em>\u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430 \u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435<\/em> \u043c\u044b \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432., \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0438\u043b\u0438 \u043e\u043f\u0440\u043e\u0432\u0435\u0440\u0433\u043d\u0443\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043d\u0430\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>foo\\w+<\/code> \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 <code>foo<\/code> \u0432 \u0441\u0442\u043e\u0433\u0435, \u0438 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0440.\u0432. <code>foo\\w+<\/code> \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0440.\u0432. \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u043c \u043e\u0431 \u044d\u0442\u043e\u043c. \u0412 \u0438\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438 <code>foo<\/code> \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u0441\u0442\u043e\u0433\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u044f \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0435\u0449\u0451 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439, \u0442\u0430\u043a \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0438\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u043e \u0432 \u043e\u0440\u0433\u0430\u043d\u0438\u0447\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043a\u0440\u0435\u0439\u0442 \u043d\u0430\u0447\u0430\u043b \u043f\u0440\u043e\u0433\u0438\u0431\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0432\u0435\u0441\u043e\u043c. \u041f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0432\u0441\u0451 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u044f\u0432\u043b\u044f\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u041d\u0435 \u0432\u0441\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0431\u044b\u043b\u0438 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>PikeVM<\/code> \u0431\u044b\u043b\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0435\u0439 \u0438 \u0441\u0442\u0440\u0430\u0434\u0430\u043b\u0430 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043c\u043e\u0433\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043a\u043e\u043d\u0446\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u043f\u043e\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0440\u0435\u0437\u0430, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441 \u043b\u0435\u043d\u0438\u0432\u044b\u043c \u0414\u041a\u0410. \u041a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440: \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b <code>PikeVM<\/code> \u043c\u043e\u0433\u043b\u0430 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0440.\u0432. <code>\\babc\\b<\/code> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 <code>abcxyz<\/code>, \u0435\u0441\u043b\u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e 0 \u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e 3. \u041d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u0439 <code>\\b<\/code> \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u0430 <code>c<\/code> \u0441\u043b\u0435\u0434\u0443\u0435\u0442 <code>x<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0411\u044b\u043b\u043e \u0442\u0440\u0443\u0434\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a\u0443\u044e \u0438\u0437 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440.\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u043e\u0434\u0435 \u0431\u044b\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>match<\/code>, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u0440\u0430\u0441\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043a\u0440\u0435\u0439\u0442\u0430 \u043d\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u043e \u0444\u0430\u043a\u0442\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f (\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043e\u0434\u0438\u043d \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code> (\u0435\u0449\u0451 \u0434\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Aho%E2%80%93Corasick_algorithm\" rel=\"noopener noreferrer nofollow\">\u0410\u0445\u043e-\u041a\u043e\u0440\u0430\u0441\u0438\u043a<\/a> \u0434\u043b\u044f \u0440.\u0432. \u0442\u0438\u043f\u0430 <code>foo1|foo2|...|fooN<\/code>, \u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u043e (it was extremenly hacky) \u0441\u0434\u0435\u043b\u0430\u043d\u043e, \u0447\u0442\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/Thompson%27s_construction\" rel=\"noopener noreferrer nofollow\">\u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 (Thompson NFA)<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439 \u043d\u0443\u0436\u0434\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438, \u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0443\u0436\u0434\u0430\u043b\u0430\u0441\u044c \u0432 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0438.<\/p>\n<p><a class=\"anchor\" name=\"pr_testing\" id=\"pr_testing\"><\/a><\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>\u0412 \u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0433\u0434\u0430 <code>regex<\/code> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u0430\u043a \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432., \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438, \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438. \u041c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432., \u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u043c \u0431\u044b\u043b\u043e \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0432\u0435\u043b\u0438 \u0441\u0435\u0431\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043d\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043e\u0431\u0449\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0432 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438. \u042d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0432\u0438\u0434\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043b\u0435\u043d\u0438\u0432\u043e\u0433\u043e \u0414\u041a\u0410 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0430 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432. \u0442\u0438\u043f\u0430 <code>PikeVM<\/code> \u0438\u043b\u0438 <code>BoundedBacktracker<\/code> \u0443\u0436\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u044f\u0432\u0438\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430. \u0427\u0442\u043e \u0436\u0435 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u043d\u0430\u0439\u0434\u0451\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 &#8212; \u043d\u0435\u0442? \u0423\u043f\u0441. \u042d\u0442\u043e \u0431\u0430\u0433.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0434\u043e \u0440\u0435\u043b\u0438\u0437\u0430 <code>regex 1.9<\/code>, \u0447\u0442\u043e \u0432\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API, \u0447\u0442\u043e \u043e\u0441\u043b\u043e\u0436\u043d\u044f\u043b\u043e \u0438\u0445 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0435 API, \u043d\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u0432\u044b\u0431\u043e\u0440\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432. \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0430\u044f. \u0422.\u043e. \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u044f\u0441\u043d\u043e \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432. \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0440.\u0432. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u043e \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u0442 \u0438 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043b\u043e\u0433\u0438\u043a\u0438. \u0422\u0430\u043a \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u044c \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0432\u0441\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432. \u0418 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0431\u044b \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e, \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0434\u0435\u0431\u0430\u0433 \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0431\u044b\u043b \u0431\u044b \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u043c, \u0447\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043b\u043e\u0433\u0438\u043a\u0443 \u0432\u044b\u0431\u043e\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438.<\/p>\n<p>\u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0440\u0435\u0439\u0442\u0430, \u0447\u0442\u043e\u0431\u044b  \u0442\u0435\u0441\u0442\u044b \u0438\u043c\u0435\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c API. \u041d\u043e \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0442\u0435\u0441\u0442\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432., \u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0438 \u0438\u0445 \u043f\u0440\u043e\u0433\u043e\u043d \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u0434\u0432\u0438\u0436\u043a\u043e\u0432. \u0421 \u0442\u0435\u0445 \u043f\u043e\u0440, \u043a\u043e\u0433\u0434\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0435 \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438, \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0435 \u0438\u0434\u0442\u0438 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u0443\u0442\u0438.<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u044f \u0437\u0430\u043a\u043e\u0441\u0442\u044b\u043b\u0438\u043b \u0445\u0430\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b:<\/p>\n<ul>\n<li>\n<p>\u042f \u0440\u0430\u0441\u043a\u0440\u044b\u043b <a href=\"https:\/\/github.com\/rust-lang\/regex\/blob\/5a34a39b72d85730065d3ffe4ce3715f2731e49a\/src\/lib.rs#L790-L801\" rel=\"noopener noreferrer nofollow\">\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 API<\/a>, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0438\u0437\u0432\u043d\u0435 \u043a\u0440\u0435\u0439\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u042f \u0441\u0434\u0435\u043b\u0430\u043b \u044d\u0442\u043e \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0438\u043f <code>Regex<\/code> \u0438\u0437 \u044d\u0442\u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 API, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <a href=\"https:\/\/github.com\/rust-lang\/regex\/blob\/5a34a39b72d85730065d3ffe4ce3715f2731e49a\/src\/re_unicode.rs#L174-L179\" rel=\"noopener noreferrer nofollow\">\u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0442\u0440\u0435\u0439\u0442\u0430 <code>From<\/code><\/a>.<\/p>\n<\/li>\n<li>\n<p>\u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0442\u0435\u0441\u0442\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <a href=\"https:\/\/github.com\/rust-lang\/regex\/blob\/5a34a39b72d85730065d3ffe4ce3715f2731e49a\/tests\/fowler.rs#L5\" rel=\"noopener noreferrer nofollow\">\u043c\u0430\u043a\u0440\u043e\u0441<\/a><\/p>\n<\/li>\n<li>\n<p>\u042f \u0441\u043e\u0437\u0434\u0430\u043b \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0446\u0435\u043b\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0418 \u043a\u0430\u0436\u0434\u0430\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0446\u0435\u043b\u044c \u043e\u0442\u0432\u0435\u0447\u0430\u043b\u0430 \u0437\u0430 <a href=\"https:\/\/github.com\/rust-lang\/regex\/blob\/5a34a39b72d85730065d3ffe4ce3715f2731e49a\/tests\/test_backtrack.rs#L3-L11\" rel=\"noopener noreferrer nofollow\">\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u0432\u0441\u0451 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u043e \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0433\u0440\u043e\u043c\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0445\u0430\u043a\u043e\u0432 \u0438 \u043d\u0443\u0436\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u0438\u0438. \u0420\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0430\u043c\u0438 \u0441\u0432\u043e\u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 API \u043d\u0430\u0440\u0443\u0436\u0443 \u043d\u0435 \u044f\u0432\u043b\u044f\u043b\u043e\u0441\u044c \u0441\u0442\u0440\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043d\u043e \u044d\u0442\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u0434\u0435\u043b\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0431\u0435\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 API \u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0440\u0435\u0439\u0442\u0430.<\/p>\n<p><a class=\"anchor\" name=\"pr_niche_apis\" id=\"pr_niche_apis\"><\/a><\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0417\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u043d\u0438\u0448\u0435\u0432\u044b\u0435 API<\/h3>\n<p>\u041d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u043b\u0435\u0442 \u0431\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 API \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>, \u043d\u043e \u0442\u043e \u0431\u044b\u043b\u0438 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043d\u0438\u0448\u0435\u0432\u044b\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c API, \u0438\u043b\u0438 \u043c\u043d\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u044f\u0441\u043d\u043e, \u043a\u0430\u043a\u0438\u043c \u044d\u0442\u043e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 API \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c.<\/p>\n<p>\u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u044b\u043b\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 (multi-pattern). \u0410 \u0438\u043c\u0435\u043d\u043d\u043e, \u043a\u0440\u0435\u0439\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 API <a href=\"https:\/\/docs.rs\/regex\/latest\/regex\/struct.RegexSet.html\" rel=\"noopener noreferrer nofollow\"><code>RegexSet<\/code><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0435\u0441\u044f) \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0440.\u0432. \u0441\u0440\u0430\u0437\u0443. \u0421\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e API \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0440.\u0432., \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0448\u043b\u0438\u0441\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u043e\u0433\u0435. \u041d\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e API, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0449\u0451 \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0438\u043b\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c, \u043d\u043e \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u043a\u0430\u043a \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u0431\u044b\u0442\u044c, \u0435\u0441\u043b\u0438 \u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u043e \u043f\u043e\u043b\u043d\u044b\u0439 API <code>Regex<\/code>.<\/p>\n<p>\u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432. \u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, API <code>RegexSet<\/code> \u0431\u044b\u043b \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0435\u043d \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e-\u0442\u0430\u043a\u0438 \u0445\u0438\u0442\u0440\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0431\u044b \u043b\u0438\u0431\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0432\u0441\u0435\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>\u041d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u044d\u0442\u043e\u0433\u043e, \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u043d\u043e\u0439 \u044f\u0441\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u0438 API, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u043f\u043e\u0438\u0441\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b <code>RegexSet<\/code>. \u0418\u043c\u0435\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 API, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, <code>RegexSet<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0435\u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u043c\u043e\u0433 \u0431\u044b \u0431\u044b\u0442\u044c \u0447\u0435\u043c-\u0442\u043e, \u0447\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u0438 API \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>.<\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0431\u044b\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 API:<\/p>\n<ul>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u044f\u043a\u043e\u0440\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f <code>^<\/code> \u0432 \u0448\u0430\u0431\u043b\u043e\u043d. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440.\u0432. \u043d\u0430 <em>\u0447\u0430\u0441\u0442\u0438<\/em> \u0441\u0442\u043e\u0433\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u043d\u043e \u0433\u0434\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0442\u0435\u043a\u0441\u0442 \u0432 \u0433\u0440\u0443\u043f\u043f\u0430\u0445 \u0437\u0430\u0445\u0432\u0430\u0442\u0430. \u042d\u0442\u043e \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f\u0445. \u041a\u0440\u0435\u0439\u0442 <code>regex<\/code> \u043c\u043e\u0433 \u0431\u044b \u0431\u044b\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e, \u043d\u043e \u043d\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 API, \u043a\u0440\u043e\u043c\u0435 \u043a\u0430\u043a \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u043f\u0446\u0438\u0438 &#171;\u044f\u043a\u043e\u0440\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430&#187; (anchored mode), \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 API (\u0427\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <code>^<\/code> \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0440.\u0432.).<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0440.\u0432. \u0431\u0435\u0437 \u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c mutable scratch space. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043d\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e. \u041d\u043e \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0442\u0430\u043a \u0436\u0435 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 API \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0431\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f &#171;mutable scratch space&#187;.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0440.\u0432. <a href=\"https:\/\/github.com\/rust-lang\/regex\/issues\/425\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0438\/\u0438\u043b\u0438 \u043d\u0430 \u043d\u0435-\u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0445 \u0441\u0442\u043e\u0433\u0430\u0445<\/a>. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440.\u0432. \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 \u0432\u0440\u043e\u0434\u0435 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Rope_(data_structure)\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0440\u043e\u043f (ropes)<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0430\u0441\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430\u0445. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0431\u0448\u0438\u0440\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u0430\u044f, \u0438 \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0434\u0430\u0436\u0435 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u043f\u043e\u0434\u0441\u0442\u0443\u043f\u0438\u0442\u044c\u0441\u044f. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0441 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c \u043a\u0440\u0435\u0439\u0442\u0430, \u0434\u0440\u0443\u0433\u0438\u043c \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0433\u0447\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p>\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u043e\u0432\u044b\u0439 \u043a\u0440\u0435\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b &#171;\u043f\u0435\u0440\u0435\u0434\u044b\u0448\u043a\u0443&#187; \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 API, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043b\u044e\u0434\u044f\u043c, \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u0433\u0440\u043e\u043c\u043e\u0436\u0434\u0430\u0442\u044c API \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438 \u043b\u0435\u0436\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440.\u0432. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f \u044d\u0442\u043e\u0442 \u043a\u0440\u0435\u0439\u0442 \u043d\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043c\u044b \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0438\u0434, \u0447\u0442\u043e \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c API \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u043c \u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u043c. \u041d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043a\u0430\u043a \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, API \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex-automata<\/code> \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0439. \u0418 \u0441\u0434\u0435\u043b\u0430\u0432 \u0435\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0440\u0435\u043b\u0438\u0437\u044b \u0441 \u043b\u043e\u043c\u0430\u044e\u0449\u0438\u043c\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0434\u043b\u044f \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>.<\/p>\n<p>\u042d\u0442\u0430 \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043d\u0435 \u0442\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043c\u043e\u0442\u0438\u0432\u043e\u0432, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u0438 \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/docs.rs\/regex-syntax\" rel=\"noopener noreferrer nofollow\">\u043a\u0440\u0435\u0439\u0442\u0430 <code>regex-syntax<\/code><\/a>. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043b\u044e\u0434\u044f\u043c (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043c\u0435\u043d\u044f) \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0430\u0440\u0441\u0435\u0440\u0443 \u0440.\u0432. \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u042f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e \u043d\u0435 \u0445\u043e\u0442\u0435\u043b \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0435\u0440 \u0432 \u043a\u0440\u0435\u0439\u0442\u0435 <code>regex<\/code> \u043d\u0430\u0440\u0443\u0436\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u043e \u0431\u044b \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u0435\u0433\u043e \u0442\u0438\u043f\u044b \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>. (\u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0440\u0435\u0439\u0442 <code>regex-syntax<\/code> \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u043b\u043e\u043c\u0430\u044e\u0449\u0438\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432, \u0447\u0435\u043c \u0441\u0430\u043c \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code>). \u0412\u044b\u043d\u0435\u0441\u044f \u043f\u0430\u0440\u0441\u0435\u0440 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u0440\u0435\u0439\u0442, \u044f \u0441\u043c\u043e\u0433 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u043a\u0430\u043a \u0434\u0435\u0442\u0430\u043b\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>, \u0438 \u0442\u0430\u043a \u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u043c\u0438.<\/p>\n<p><a class=\"anchor\" name=\"pr_compiled_dfas\" id=\"pr_compiled_dfas\"><\/a><\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0414\u041a\u0410<\/h3>\n<p>\u0420\u043e\u0436\u0434\u0435\u043d\u0438\u0435 <code>regex-automata<\/code> \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043c\u043e\u0435\u0433\u043e \u043a\u0440\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0445\u043e\u0434\u0430 \u043d\u0430 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>, \u0430 \u0441\u043e\u0432\u043f\u0430\u043b\u043e \u0441 \u0436\u0435\u043b\u0430\u043d\u0438\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0414\u041a\u0410, \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0432 \u0438\u0445 \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0440\u0430\u043d\u0442\u0430\u0439\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0433 \u0431\u044b \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c (\u0441 zero-cost-\u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c) \u044d\u0442\u0438 \u0414\u041a\u0410 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e <code>regex-automata<\/code> \u0434\u043b\u044f <a href=\"https:\/\/github.com\/BurntSushi\/bstr\/tree\/b3cab1905c46ad7de78a032a61eef0437ed7fb58\/src\/unicode\/fsm\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0414\u041a\u0410<\/a>, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0434\u043b\u044f \u042e\u043d\u0438\u043a\u043e\u0434\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0440\u0435\u0439\u0442\u0430 <a href=\"https:\/\/github.com\/BurntSushi\/bstr\" rel=\"noopener noreferrer nofollow\"><code>bstr<\/code><\/a>.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 <code>regex-automata<\/code>, \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u041d\u041a\u0410 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u043b\u044f \u043d\u0438\u0445, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0432 \u043a\u0440\u0435\u0439\u0442\u0435 <code>regex<\/code>. \u0412 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u043d\u0430\u0447\u0430\u043b \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u0435\u043d \u0438 \u043f\u043e\u043b\u043e\u043d \u043c\u0435\u0441\u0442, \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439.<\/p>\n<p>\u042f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u0440\u0435\u0439\u0442\u0430 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 <code>regex-nfa<\/code>, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u0431\u044b \u043a\u0440\u0435\u0439\u0442\u044b \u0438 <code>regex<\/code> \u0438 <code>regex-automata<\/code>. \u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0439 \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0448\u0430\u0440\u0438\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u043a\u0440\u0435\u0439\u0442\u0430\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Powerset_construction\" rel=\"noopener noreferrer nofollow\">\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0437\u0430\u0446\u0438\u0438<\/a> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435 \u0442\u0430\u043a, \u0447\u0442\u043e \u043c\u043e\u0433\u043b\u0430 \u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0414\u041a\u0410, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u043b\u0435\u043d\u0438\u0432\u044b\u0445 \u0414\u041a\u0410.<\/p>\n<p>\u041d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0431\u043b\u0438\u0436\u0435 \u043a &#171;\u0434\u0432\u0438\u0436\u043a\u0443 \u0440.\u0432.&#187;, \u0447\u0435\u043c \u043a &#171;\u043f\u0440\u043e\u0441\u0442\u043e \u041d\u041a\u0410&#187;. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043a\u0440\u0435\u0439\u0442 <code>regex-automata<\/code> \u043a\u0430\u043a \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0414\u041a\u0410, \u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u043a\u0430\u043a \u0437\u0432\u0435\u0440\u0438\u043d\u0435\u0446 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432. \u041f\u043b\u0430\u043d \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u044b\u043b, \u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432. \u0432 \u043a\u0440\u0435\u0439\u0442 <code>regex-automata<\/code>, \u0430 \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code> \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u043e\u043d\u043a\u043e\u0439 \u043e\u0431\u0451\u0440\u0442\u043a\u043e\u0439 \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0433\u043e. \u0423\u0441\u0442\u0440\u043e\u0438\u0432 \u0432\u0441\u0451 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043e\u0442 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code> \u043d\u0430 <code>regex-automata<\/code>, \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c API.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0414\u041a\u0410, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code> \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043b\u0435\u043d\u0438\u0432\u044b\u0445 \u0414\u041a\u0410. \u0418 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043a\u043e\u0434, \u0447\u0442\u043e \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0432 \u041d\u041a\u0410. \u0425\u0435\u0445, \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0414\u041a\u0410 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>. (\u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e\u0435 &#171;\u043d\u0435\u0442&#187; \u0432 \u0434\u0432\u0438\u0436\u043a\u0430\u0445 \u0440.\u0432. \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0414\u041a\u0410 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0434\u0443\u0442, \u043d\u043e \u0438 \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0435\u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432, \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0432 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0440.\u0432. \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0414\u041a\u0410 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u042e\u043d\u0438\u043a\u043e\u0434\u0430).<\/p>\n<p><a class=\"anchor\" name=\"regex_cli\" id=\"regex_cli\"><\/a><\/p>\n<h2>\u041f\u043e \u043f\u0443\u0442\u0438 \u0441 regex-cli<\/h2>\n<p><code>regex-cli<\/code> &#8212; \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u044c \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>, \u0438 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 API \u043a\u0440\u0435\u0439\u0442\u043e\u0432 <code>regex-syntax<\/code>, <code>regex-automata<\/code> \u0438 <code>regex<\/code>. \u0422\u0430\u043a \u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0414\u041a\u0410 \u0432 \u0444\u0430\u0439\u043b \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f Rust-\u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0438\u0445 \u0447\u0442\u0435\u043d\u0438\u044f.<\/p>\n<p>\u042f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>regex-cli<\/code> \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c, \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u0442\u0443\u043b\u0437\u0443 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>:<\/p>\n<pre><code>$ cargo install regex-cli <\/code><\/pre>\n<p>\u0412\u043e\u0442 \u043f\u0430\u0440\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u043a\u0430\u043a \u0432\u043b\u0438\u044f\u0435\u0442 \u042e\u043d\u0438\u043a\u043e\u0434 \u043d\u0430 \u0440.\u0432. <code>.<\/code>. \u0421\u043d\u0430\u0447\u0430\u043b\u0430, \u0432\u0435\u0440\u0441\u0438\u044f, \u0433\u0434\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u042e\u043d\u0438\u043a\u043e\u0434:<\/p>\n<pre><code>$ regex-cli debug thompson '.' --no-table  thompson::NFA( >000000: binary-union(2, 1)  000001: \\x00-\\xFF => 0 ^000002: capture(pid=0, group=0, slot=0) => 10  000003: \\x80-\\xBF => 11  000004: \\xA0-\\xBF => 3  000005: \\x80-\\xBF => 3  000006: \\x80-\\x9F => 3  000007: \\x90-\\xBF => 5  000008: \\x80-\\xBF => 5  000009: \\x80-\\x8F => 5  000010: sparse(\\x00-\\t => 11, \\x0B-\\x7F => 11, \\xC2-\\xDF => 3, \\xE0 => 4, \\xE1-\\xEC => 5, \\xED => 6, \\xEE-\\xEF => 5, \\xF0 => 7, \\xF1-\\xF3 => 8, \\xF4 => 9)  000011: capture(pid=0, group=0, slot=1) => 12  000012: MATCH(0)  transition equivalence classes: ByteClasses(0 => [\\x00-\\t], 1 => [\\n], 2 => [\\x0B-\\x7F], 3 => [\\x80-\\x8F], 4 => [\\x90-\\x9F], 5 => [\\xA0-\\xBF], 6 => [\\xC0-\\xC1], 7 => [\\xC2-\\xDF], 8 => [\\xE0], 9 => [\\xE1-\\xEC], 10 => [\\xED], 11 => [\\xEE-\\xEF], 12 => [\\xF0], 13 => [\\xF1-\\xF3], 14 => [\\xF4], 15 => [\\xF5-\\xFF], 16 => [EOI]) ) <\/code><\/pre>\n<p>\u0410 \u0432\u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u044f \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u042e\u043d\u0438\u043a\u043e\u0434\u043e\u043c:<\/p>\n<pre><code>$ regex-cli debug thompson '(?-u:.)' --no-table --no-utf8-syntax  thompson::NFA( >000000: binary-union(2, 1)  000001: \\x00-\\xFF => 0 ^000002: capture(pid=0, group=0, slot=0) => 3  000003: sparse(\\x00-\\t => 4, \\x0B-\\xFF => 4)  000004: capture(pid=0, group=0, slot=1) => 5  000005: MATCH(0)  transition equivalence classes: ByteClasses(0 => [\\x00-\\t], 1 => [\\n], 2 => [\\x0B-\\xFF], 3 => [EOI]) ) <\/code><\/pre>\n<p>\u041d\u0430 \u0432\u044b\u0432\u043e\u0434\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430, \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0440\u0435\u0439\u0442\u043e\u043c <code>regex-automata<\/code> \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440.\u0432. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 <code>regex-cli debug<\/code> \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>.<\/p>\n<pre><code> $ regex-cli debug Prints the debug representation of various things from regex-automata and regex-syntax.  This is useful for ad hoc interactions with objects on the command line. In general, most objects support the full suite of configuration available in code via the crate.  USAGE:     regex-cli debug &lt;command> ...  COMMANDS:     ast        Print the debug representation of an AST.     dense      Print the debug representation of a dense DFA.     hir        Print the debug representation of an HIR.     literal    Print the debug representation of extracted literals.     onepass    Print the debug representation of a one-pass DFA.     sparse     Print the debug representation of a sparse DFA.     thompson   Print the debug representation of a Thompson NFA. <\/code><\/pre>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>regex-cli find<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c ad hoc \u043f\u043e\u0438\u0441\u043a. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043c\u0443\u043b\u044c\u0442\u0438\u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0441 \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u0437\u0430\u0445\u0432\u0430\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432. meta:<\/p>\n<pre><code>$ regex-cli find capture meta \\    -p '(?&lt;email>[.\\w]+@(?&lt;domain>[.\\w]+))' \\    -p '(?&lt;phone>(?&lt;areacode>[0-9]{3})-[0-9]{3}-[0-9]{4})' \\    -y 'foo@example.com, 111-867-5309'      parse time:  20.713\u00b5s  translate time:  22.116\u00b5s build meta time:  834.731\u00b5s     search time:  142.537\u00b5s   total matches:  2 0:{ 0: 0..15\/foo@example.com, 1\/email: 0..15\/foo@example.com, 2\/domain: 4..15\/example.com } 1:{ 0: 17..29\/111-867-5309, 1\/phone: 17..29\/111-867-5309, 2\/areacode: 17..20\/111 } <\/code><\/pre>\n<p>\u0417\u0430\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u0432 <a href=\"https:\/\/github.com\/rust-lang\/regex\/blob\/4f47b14d60e82e85a880513833362d5fb485ffa8\/regex-cli\/README.md\" rel=\"noopener noreferrer nofollow\"><code>regex-cli README<\/code><\/a> \u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438.<\/p>\n<p><a class=\"anchor\" name=\"data_flow\" id=\"data_flow\"><\/a><\/p>\n<h2>\u041f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u0438, \u0441\u0442\u043e\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0430\u0443\u0437\u0443 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439 \u0438 \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432. \u0422.\u0435., \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0435 <code>Regex::new<\/code> \u0441 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c, \u043c\u044b \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441 \u044d\u0442\u0438\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0435\u0433\u043e \u0432 \u043d\u0435\u0447\u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f.<\/p>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f \u0432 <a href=\"https:\/\/docs.rs\/regex-syntax\/0.7.*\/regex_syntax\/ast\/enum.Ast.html\" rel=\"noopener noreferrer nofollow\"><code>Ast<\/code> (Abstract Syntax Tree)<\/a>. <code>Ast<\/code> &#8212; \u044d\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0442\u0435\u043c <code>Ast<\/code> \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 <a href=\"https:\/\/docs.rs\/regex-syntax\/0.7.*\/regex_syntax\/hir\/struct.Hir.html\" rel=\"noopener noreferrer nofollow\"><code>Hir<\/code> (High-Level Intermediate Representation)<\/a> <code>Hir<\/code> &#8212; \u044d\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u0447\u0435\u043c <code>Ast<\/code>. \u0412\u0435\u0449\u0438, \u0432\u0440\u043e\u0434\u0435 Unicode case folding \u0438\u043b\u0438 Unicode character class reference \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043b\u0435\u0434\u043e\u043c <code>Hir<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439. \u041f\u0435\u0440\u0432\u0430\u044f &#8212; \u044d\u0442\u043e <a href=\"https:\/\/docs.rs\/regex-syntax\/0.7.2\/regex_syntax\/hir\/literal\/struct.Seq.html\" rel=\"noopener noreferrer nofollow\">\u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (literal sequence)<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432, \u0438\u0437\u0432\u043b\u0435\u0447\u0451\u043d\u043d\u043e\u0439 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u0438 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0440.\u0432. \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445. \u041f\u0440\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/util\/prefilter\/struct.Prefilter.html\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0444\u0438\u043b\u044c\u0442\u0440\u0430 (Prefilter)<\/a>. \u0412\u0442\u043e\u0440\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c &#8212; \u044d\u0442\u043e <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/nfa\/thompson\/struct.NFA.html\" rel=\"noopener noreferrer nofollow\">\u041d\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p>\u0412 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u041d\u041a\u0410 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432.:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/nfa\/thompson\/pikevm\/struct.PikeVM.html\" rel=\"noopener noreferrer nofollow\"><code>PikeVM<\/code><\/a> \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\u0438 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u043e\u043c. \u0422\u0430\u043a \u0436\u0435 <code>PikeVM<\/code> \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0432\u043f\u0430\u0432\u0448\u0438\u0445 \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/nfa\/thompson\/backtrack\/struct.BoundedBacktracker.html\" rel=\"noopener noreferrer nofollow\"><code>BoundedBacktracker<\/code><\/a> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u043e\u0442\u043a\u0430\u0442\u0430, \u043d\u043e \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u0435\u0431\u044f, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u043e\u0432. \u041a\u0430\u043a \u0438 <code>PikeVM<\/code>, \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/dfa\/onepass\/struct.DFA.html\" rel=\"noopener noreferrer nofollow\">\u041e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410 (one-pass DFA)<\/a> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440.\u0432., \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <code>[\u043f\u043b\u043e\u0442\u043d\u044b\u0439 \u0414\u041a\u0410 (dense DFA)<\/code>](<a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/dfa\/dense\/struct.DFA.html\" rel=\"noopener noreferrer nofollow\">https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/dfa\/dense\/struct.DFA.html<\/a>). \u041c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 (\u043a\u043e\u0433\u0434\u0430 \u0441\u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d \u0441\u043e \u0432\u0442\u043e\u0440\u044b\u043c \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u044b\u043c \u0437\u0430\u0434\u043e\u043c \u043d\u0430\u043f\u0435\u0440\u0451\u0434 \u0414\u041a\u0410) \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u043d\u043e \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u0439. \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a &#8212; \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c <code>O(2^m)<\/code> \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/hybrid\/dfa\/struct.DFA.html\" rel=\"noopener noreferrer nofollow\">\u041b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 (Lazy DFA)<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u0443\u0435\u0442 \u0441\u0435\u0431\u044f \u0438\u0437 <code>\u041d\u041a\u0410<\/code> \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u0430. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 <code>PikeVM<\/code>, \u043d\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043e\u043d \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0439, \u043a\u0430\u043a <code>\u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0414\u041a\u0410<\/code>, \u043d\u043e \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0431\u0435\u0437 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 <code>O(2^m)<\/code> \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438\/\u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0412\u0441\u0435 \u0438\u0437 \u0432\u044b\u0448\u0435\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432., \u0432\u043a\u043b\u044e\u0447\u0430\u044f <code>Prefilter<\/code>, \u0435\u0441\u043b\u0438 \u043e\u043d \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043c\u043e\u0433\u0443\u0442 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/meta\/struct.Regex.html\" rel=\"noopener noreferrer nofollow\"><code>\u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432.<\/code><\/a>.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0440\u0435\u0439\u0442 <code>regex<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043b\u0438\u0448\u044c \u0442\u043e\u043d\u043a\u043e\u0439 \u043e\u0431\u0451\u0440\u0442\u043a\u043e\u0439 \u043d\u0430\u0434 \u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043a\u043e\u043c \u0440.\u0432. \u0438\u0437 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex-automata<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u043f\u043e\u0441\u0442\u0430, \u043d\u043e \u0442\u0440\u0443\u0434\u043d\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043e\u0442\u0441\u044b\u043b\u043e\u043a \u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u0437 \u043d\u0438\u0445 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u0442\u0430\u043f\u0430\u0445 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0438\u0445 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f. \u0414\u0430\u043d\u043d\u0430\u044f \u0433\u043b\u0430\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0430\u0451\u0442 \u0441\u0430\u043c\u044b\u0439 \u043e\u0431\u0449\u0438\u0439 \u0447\u0435\u0440\u0442\u0451\u0436 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>, \u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0437\u0434\u0435\u0441\u044c \u0434\u043b\u044f \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f.<\/p>\n<p><a class=\"anchor\" name=\"lit_optimize\" id=\"lit_optimize\"><\/a><\/p>\n<h2>\u041b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u043c\u044b \u043d\u0430\u0447\u043d\u0451\u043c \u043d\u0430\u0448\u0435 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code> \u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f: \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u0438\u0437 \u0440.\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440.\u0432. <code>(foo|bar|quux)(\\s+\\w+)<\/code> \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u044f\u0437\u044b\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u044f\u0437\u044b\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043b\u0438\u0431\u043e \u0441 <code>foo<\/code>, \u043b\u0438\u0431\u043e \u0441 <code>bar<\/code>, \u043b\u0438\u0431\u043e \u0441 <code>quux<\/code>. \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0440.\u0432. \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0442\u0440\u0451\u0445 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432.<\/p>\n<p><a class=\"anchor\" name=\"lit_motivation\" id=\"lit_motivation\"><\/a><\/p>\n<h3>\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439<\/h3>\n<p>\u0422\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e? \u041f\u043e\u0447\u0435\u043c\u0443 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b \u043d\u0430\u0441 \u0432\u043e\u043e\u0431\u0449\u0435 \u0437\u0430\u0431\u043e\u0442\u044f\u0442? \u0410 \u044d\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043c\u044b\u0441\u043b\u0435\u0439:<\/p>\n<ol>\n<li>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u044b. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u0441\u0447\u0451\u0442 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 &#171;\u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b&#187; \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Single_instruction,_multiple_data\" rel=\"noopener noreferrer nofollow\">\u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439<\/a> \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0440\u0430\u0437\u0443 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0431\u0430\u0439\u0442 \u0441\u0442\u043e\u0433\u0430 \u0432 \u043e\u0434\u0438\u043d \u0448\u0430\u0433.<\/p>\n<\/li>\n<li>\n<p>\u0412 <em>\u043e\u0447\u0435\u043d\u044c<\/em> \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445, \u043d\u0435\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b (general algorithms) \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u0432 \u0440.\u0432. \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u044b \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0443\u043c\u043e\u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u0438\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432. (\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043e\u0441\u043d\u0451\u043c\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0435\u0435 \u043f\u043e\u0437\u0436\u0435), \u043d\u0438 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0439, \u043a\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044f \u0447\u0430\u0441\u0442\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u043b \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043d\u0430 \u043e\u0434\u0438\u043d \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p><a class=\"anchor\" name=\"lit_extraction\" id=\"lit_extraction\"><\/a><\/p>\n<h3>\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432<\/h3>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043a\u043e\u0435-\u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>regex-cli<\/code> \u0438 \u043f\u043e\u0434\u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>regex-cli debug literal<\/code> \u0434\u043b\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u0438\u0437 \u0440.\u0432. \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e:<\/p>\n<pre><code>$ regex-cli debug literal 'bar'            parse time:  13.967\u00b5s        translate time:  7.008\u00b5s       extraction time:  405ns     optimization time:  1.479\u00b5s                   len:  Some(1)            is finite?:  true             is exact?:  true       min literal len:  Some(3)       max literal len:  Some(3) longest common prefix:  Some(\"bar\") longest common suffix:  Some(\"bar\")  E(\"bar\") <\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435, \u044f \u0431\u0443\u0434\u0443 \u043e\u0431\u0440\u0435\u0437\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0443\u0436 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u041d\u0443 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0412\u0440\u0435\u043c\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 (<code>parse time<\/code>) \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 <code>bar<\/code> \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <a href=\"https:\/\/docs.rs\/regex-syntax\/0.7.*\/regex_syntax\/ast\/enum.Ast.html\" rel=\"noopener noreferrer nofollow\"><code>Ast<\/code><\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0440\u0435\u043c\u044f \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 (<code>translate time<\/code>) \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>Ast<\/code> \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <a href=\"https:\/\/docs.rs\/regex-syntax\/0.7.*\/regex_syntax\/hir\/struct.Hir.html\" rel=\"noopener noreferrer nofollow\"><code>Hir<\/code><\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0440\u0435\u043c\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f (<code>extraction time<\/code>) \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b\u043b\u043e \u0437\u0430\u0442\u0440\u0430\u0447\u0435\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>Hir<\/code> \u0432 <a href=\"https:\/\/docs.rs\/regex-syntax\/0.7.2\/regex_syntax\/hir\/literal\/struct.Seq.html\" rel=\"noopener noreferrer nofollow\">\u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0440\u0435\u043c\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 (<code>optimization time<\/code>) \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 &#171;\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f&#187; \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432, \u0442\u0430\u043a \u0438 \u0442\u0430\u043a\u0438\u043c \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u043c, \u043a\u0430\u043a \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u0445. \u041c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435.<\/p>\n<\/li>\n<li>\n<p><code>len<\/code> &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0424\u043b\u0430\u0433 <code>is finite<\/code> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0438\u043c\u0435\u0435\u0442 \u043b\u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0451\u043d\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0411\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432, \u0438 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u043b\u0438\u0431\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0424\u043b\u0430\u0433 <code>is exact<\/code> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u0447\u043d\u044b\u043c \u0438\u043b\u0438 \u043d\u0435\u0442 (\u0447\u0438\u0442\u0430\u0439 \u0434\u0430\u043b\u0435\u0435, \u0442.\u043a. \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u043e \u0438\u043b\u0438 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0443\u043f\u043e\u0439 \u0438 \u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043d\u044f\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043f\u0443\u0441\u0442\u0438\u043b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0435\u0431\u044f \u0438 \u043b\u044e\u0434\u0435\u0439 \u0432 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c &#8212; \u043f\u0440\u0438\u043c.) <em>An exact literal refers to a literal that reached a match state from the place where literal extraction began. Since this command extracts prefixes, an exact literal corresponds to an overall match of the regex. If a literal is not exact, then it is said to be inexact.<\/em><\/p>\n<\/li>\n<li>\n<p><code>min literal len<\/code> &#8212; \u0434\u043b\u0438\u043d\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p><code>max literal len<\/code> &#8212; \u0434\u043b\u0438\u043d\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 \u0441\u0430\u043c\u043e\u0433\u043e \u0434\u043b\u0438\u043d\u043d\u043e\u0433\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p><code>longest common prefix<\/code> (\u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u043e\u0431\u0449\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441) &#8212; \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c \u0432\u0441\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0411\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u043d\u0443\u043b\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><code>longest common suffix<\/code> (\u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u043e\u0431\u0449\u0438\u0439 \u0441\u0443\u0444\u0444\u0438\u043a\u0441) &#8212; \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043e\u043c \u0432\u0441\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0411\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u043d\u0443\u043b\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u0430. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0438\u0439 \u0441\u0443\u0444\u0444\u0438\u043a\u0441, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u0438\u0437\u0432\u043b\u0435\u0447\u0451\u043d\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0422.\u043a. \u0434\u0430\u043d\u043d\u043e\u0435 \u0440.\u0432. \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u043c <code>bar<\/code>, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0443 <code>bar<\/code>. \u0415\u0441\u043b\u0438 <code>bar<\/code> \u044f\u0432\u043b\u044f\u043b\u0441\u044f \u0441\u0442\u0440\u043e\u0433\u0438\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c, \u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u043b\u0430 \u0431\u044b \u0442\u043e\u0439 \u0436\u0435 \u0441\u0430\u043c\u043e\u0439, \u043d\u043e \u0443\u0436\u0435 \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0439.<\/p>\n<pre><code>$ regex-cli debug literal --no-table 'bar+' I(\"bar\") <\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, <code>bar<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <code>r<\/code> \u0432 \u043a\u043e\u043d\u0446\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0437. \u0412 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0451\u043d \u043a \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435, \u0442\u043e \u044f\u0437\u044b\u043a, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0434\u0430\u043d\u043d\u044b\u043c \u0440.\u0432. \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c. \u041e\u0442\u0441\u044e\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442, \u0447\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b, \u0438 \u0447\u0442\u043e, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445, \u0431\u0443\u0434\u0443\u0447\u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u043d\u044b\u043c\u0438, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u043c\u0438 (\u0435\u0441\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u044b).<\/p>\n<p>\u041d\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0440.\u0432., \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u044f\u0437\u044b\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u044f\u0437\u044b\u043a, \u043d\u043e \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b:<\/p>\n<pre><code>$ regex-cli debug literal --no-table 'bar[a-z]' I(\"bar\") <\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0438 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 <em>\u043c\u043e\u0436\u043d\u043e<\/em> \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>bara<\/code>, <code>barb<\/code>, <code>barc<\/code>, &#8230;, <code>barz<\/code>. \u041d\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u041f\u043e\u0447\u0435\u043c\u0443? \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u043e\u0439. \u0422\u0451\u043c\u043d\u043e\u0435 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u043e (dark art), \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435. \u041c\u044b \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443 <em>\u043f\u043e\u0447\u0435\u043c\u0443<\/em> \u043c\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432: \u0447\u0442\u043e\u0431\u044b \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432 \u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u043e\u0433\u0435 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432. \u0434\u043b\u044f \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u0435\u0441\u0442\u044c \u043b\u0438 \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0428\u0442\u0443\u043a\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u044b\u0431\u043e\u0440 <em>\u043a\u0430\u043a\u0438\u0435<\/em> \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b \u0438\u0441\u043a\u0430\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0430\u043a \u0436\u0435 \u0432\u0430\u0436\u0435\u043d, \u043a\u0430\u043a \u0438 \u0432\u044b\u0431\u043e\u0440 <em>\u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c<\/em> \u0438\u0445 \u0438\u0441\u043a\u0430\u0442\u044c. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441 \u0441\u0430\u043c\u043e\u0439 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442, \u0435\u0441\u043b\u0438 \u0441\u0442\u043e\u0433 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 <code>a<\/code>, \u0430 \u0432\u0430\u0448\u0435 \u0440.\u0432. \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u043c <code>a<\/code>. \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u043e\u0431\u0435\u0438\u0445 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0446\u0435\u043b\u0435\u0439:<\/p>\n<ul>\n<li>\n<p>\u041c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432. \u0422.\u0435. \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u043e\u0442 \u043f\u043e\u0438\u0441\u043a\u0430. \u0422.\u0435., \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0435\u0444\u0438\u043b\u044c\u0442\u0440 \u0430\u043a\u0442\u0438\u0432\u0435\u043d, \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432. \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u043e\u0433\u0430. \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u0444\u0438\u043b\u044c\u0442\u0440 \u0447\u0430\u0441\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430\u0445, \u0442\u043e \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0440\u0435\u0439\u0442\u0435 \u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439 \u0432 0%, \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0443\u0445\u0443\u0434\u0448\u0438\u0442 \u043e\u0431\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u0447\u0438\u043d\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u043d\u0430\u0437\u044b\u0432\u0430\u043b \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 <em>\u0442\u0451\u043c\u043d\u044b\u043c \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u043e\u043c<\/em> (dark art) \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u043e\u0438\u0441\u043a \u043d\u0430\u0447\u043d\u0451\u0442\u0441\u044f, \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0432\u044b\u0448\u0435\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439. \u042d\u0442\u0438 \u043e\u0431\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0442\u043e\u0433\u0430, \u0438 \u0435\u0433\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0446\u0435\u043b\u044c\u044e &#171;\u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f&#187; \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043e\u0431\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u0430. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0438 \u0432 \u0442\u043e\u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443. \u0412\u043e\u0442 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0451\u043c\u043d\u044b\u043c \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u043e\u043c.<\/p>\n<p>\u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0435\u0441\u0442\u044c \u043a\u043e\u0435-\u043a\u0430\u043a\u0438\u0435 \u043e\u0431\u0449\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b (guidelines), \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<ul>\n<li>\n<p>\u041c\u0435\u043d\u044c\u0448\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u043e\u0431\u044b\u0447\u043d\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u043d\u043e \u043d\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 (\u0442.\u0435. \u0434\u043b\u0438\u043d\u043e\u0439 1 \u0438\u043b\u0438 2 \u0431\u0430\u0439\u0442\u0430). \u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0435\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u043e, \u0438 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u043e\u0442 \u043d\u0438\u0445 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043d\u0430\u0441 5000 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f ASCII \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438 \u0432 \u043d\u0438\u0436\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435. \u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u043a \u043f\u043e\u0447\u0442\u0438 26, \u0432\u0437\u044f\u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430. \u041d\u043e \u044d\u0442\u0430 \u043d\u043e\u0432\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u043e, \u0447\u0442\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0443\u0434\u0430\u0440\u0443 \u043f\u043e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0435 \u0438 \u043a \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u043c\u0443 \u0440\u0435\u0439\u0442\u0443 \u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439. \u0418 \u0431\u044b\u043b\u043e \u0431\u044b \u043b\u0443\u0447\u0448\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441 \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u0438\u043d\u043d\u044b\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b \u0432 \u043e\u0431\u0449\u0435\u043c \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435, \u043d\u043e \u043d\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439. \u0414\u043b\u0438\u043d\u043d\u044b\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u0431\u0438\u0440\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435, \u0442.\u0435. \u043e\u043d\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043d\u044c\u0448\u0435\u043c\u0443 \u0440\u0435\u0439\u0442\u0443 \u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439, \u0442.\u043a. \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0438\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043c\u0435\u043d\u044c\u0448\u0435. \u041d\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0434\u043b\u0438\u043d\u043d\u044b\u043c \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u0432\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c <code>foobar<\/code>, <code>foobaz<\/code>, <code>fooquux<\/code>, \u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0431\u0443\u0434\u0435\u0442 <code>foo<\/code> \u0434\u0430\u0436\u0435 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u043a\u043e\u0440\u043e\u0447\u0435 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u044d\u0442\u0438\u0445 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432. \u041e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0445\u043e\u0440\u043e\u0448 \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0431\u044b\u0441\u0442\u0440\u044b\u0439).<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432, \u043d\u043e \u0435\u0441\u0442\u044c \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0432 \u0438\u0433\u0440\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, ASCII \u043f\u0440\u043e\u0431\u0435\u043b (<code>U+0020<\/code>) \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439. \u0415\u0441\u043b\u0438 \u0431\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u043f\u0440\u043e\u0431\u0435\u043b, \u0442\u043e\u0433\u0434\u0430 \u0431\u044b \u043e\u043d\u0430 \u0441\u0442\u0430\u043b\u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e \u0440.\u0432., \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u0440\u0438 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u044b\u0445 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430:<\/p>\n<pre><code>$ regex-cli debug literal --no-table '(?:foo|z|bar)[a-z]+' I(\"foo\") I(\"z\") I(\"bar\") <\/code><\/pre>\n<p>\u0410 \u0432\u043e\u0442 \u0432 \u044d\u0442\u043e\u043c \u0440.\u0432. \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <code>z<\/code> \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u043c:<\/p>\n<pre><code>$ regex-cli debug literal --no-table '(?:foo| |bar)[a-z]+' Seq[\u221e] <\/code><\/pre>\n<p>\u042d\u0442\u0430 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043e \u0432\u0440\u0435\u043c\u044f &#171;\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e&#187; \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u043f\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u042d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u0440\u0438\u043d\u044f\u043b\u0430 \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0431\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0430, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u043c\u0443 \u0440\u0435\u0439\u0442\u0443 \u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439, \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0430, \u044d\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 (\u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e) \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043b\u044c\u0442\u0440\u0430. \u0415\u0441\u043b\u0438 \u043c\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e, \u0442\u043e \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c:<\/p>\n<pre><code>$ regex-cli debug literal --no-table --no-optimize '(?:foo| |bar)[a-z]+' I(\"foo\") I(\" \") I(\"bar\") <\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0451 \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442\u044c, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0435 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u043c\u0430\u043b\u043e\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0435 \u0431\u0443\u0434\u0443\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0442\u043e\u0447\u043d\u044b\u043c\u0438. \u041d\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043f\u0440\u043e\u0431\u0435\u043b, \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439.<\/p>\n<pre><code>$ regex-cli debug literal --no-table 'foo| |bar' E(\"foo\") E(\" \") E(\"bar\") <\/code><\/pre>\n<p>\u042d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u0447\u043d\u044b\u043c\u0438, \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432. \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043b\u044c\u0442\u0440\u0430. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043b\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0439\u0441\u0442\u0432\u043e \u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0440\u0435\u0439\u0442\u0435 \u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043a \u043c\u0435\u0441\u0442\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u0439\u0434\u0451\u0442 \u043f\u043e\u0438\u0441\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432, \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>\u0422\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u044f\u0441\u043d\u0438\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0442\u0435\u0440\u043c\u0438\u043d \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u0430\u044f <em>\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/em> \u0432\u043c\u0435\u0441\u0442\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e <em>\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430<\/em>. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e, \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0451\u043d\u043d\u044b\u0445 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code> \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c Perl-\u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443. \u0422.\u0435. \u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f, \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f <em>\u0442\u0430\u043a, \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b<\/em> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c (backtracking search). \u042d\u0442\u043e \u0442\u0430\u043a \u0436\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f leftmost-first \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f\u043c\u0438, \u0438 \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>|<\/code> \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u0438\u0432\u043d\u044b\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>$ regex-cli debug literal --no-table 'sam|samwise' E(\"sam\")  $ regex-cli debug literal --no-table 'samwise|sam' E(\"samwise\") E(\"sam\") <\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, <code>sam|samwise<\/code> \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u0442\u0447\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c <code>sam<\/code>, \u0442.\u043a. <code>sam<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c <code>samwise<\/code> \u0438 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u0438\u0434\u0451\u0442 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 <code>sam<\/code>, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439, \u0442.\u043a. <code>samwise<\/code> \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0451\u0442. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, <code>samwise|sam<\/code> \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0431\u0435 \u0432\u0435\u0442\u043a\u0438. \u0414\u0430\u0436\u0435 \u043f\u0440\u0438 \u0442\u043e\u043c, \u0447\u0442\u043e <code>sam<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c <code>samwise<\/code>, \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e <code>samwise<\/code> \u0438\u0434\u0451\u0442 \u043f\u0435\u0440\u0432\u044b\u043c, \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u0434\u043b\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 <code>samwise<\/code> \u0432 \u0441\u0442\u043e\u0433\u0435.<\/p>\n<p>(\u0417\u0430\u043c\u0435\u0442\u043a\u0430: POSIX \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432. \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0440.\u0432. \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e, \u0432 \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f leftmost-longest \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438, \u043a\u043e\u0433\u0434\u0430 \u0441\u0430\u043c\u043e\u0435 \u0434\u043b\u0438\u043d\u043d\u043e\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>|<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u0438\u0432\u043d\u044b\u043c. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a <a href=\"https:\/\/github.com\/intel\/hyperscan\" rel=\"noopener noreferrer nofollow\">Hyperscan<\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 &#171;\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f&#187; \u0438\u043b\u0438 &#171;\u0441\u0430\u043c\u043e\u0435 \u0440\u0430\u043d\u043d\u0435\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435&#187;. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430 \u0441\u0442\u043e\u0433\u0435 <code>abc<\/code> \u043f\u043e \u0440.\u0432. <code>abc|a<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043e \u043e\u0431\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f <code>a<\/code> \u0438 <code>abc<\/code>).<\/p>\n<p>\u041d\u0430\u0448\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0447\u0442\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0437\u0443\u043c\u043d\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>$ regex-cli debug literal --no-table 'abc?de?[x-z]ghi' I(\"abcde\") I(\"abcdx\") I(\"abcdy\") I(\"abcdz\") I(\"abdex\") I(\"abdey\") I(\"abdez\") I(\"abdxg\") I(\"abdyg\") I(\"abdzg\") <\/code><\/pre>\n<p>\u0422.\u0435. \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0448\u0442\u0443\u043a\u0438 \u0432\u0440\u043e\u0434\u0435 <code>?<\/code> \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 <a href=\"https:\/\/docs.rs\/regex-syntax\/latest\/regex_syntax\/hir\/literal\/struct.Extractor.html\" rel=\"noopener noreferrer nofollow\">\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439<\/a>. (\u0417\u0430\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0442\u0430\u043a \u0436\u0435 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u044f\u0437\u044b\u043a\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0440.\u0432., \u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u044b\u0431\u0440\u0430\u043b\u0430 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0441 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u043e\u0439.)<\/p>\n<p>\u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 &#171;\u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430&#187; \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u042e\u043d\u0438\u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0430\u043a \u0436\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code>$ regex-cli debug literal --no-table '(?i)She' E(\"SHE\") E(\"SHe\") E(\"ShE\") E(\"She\") E(\"sHE\") E(\"sHe\") E(\"shE\") E(\"she\") E(\"\u017fHE\") E(\"\u017fHe\") E(\"\u017fhE\") E(\"\u017fhe\") <\/code><\/pre>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043d\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0443\u044e Unicode case folding, \u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0438\u0437 <code>Ast<\/code> \u0432 <code>Hir<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a \u0436\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 case folding:<\/p>\n<pre><code>$ regex-cli debug hir --no-table '(?i)She' Concat(     [         Class(             {                 'S'..='S',                 's'..='s',                 '\u017f'..='\u017f',             },         ),         Class(             {                 'H'..='H',                 'h'..='h',             },         ),         Class(             {                 'E'..='E',                 'e'..='e',             },         ),     ], ) <\/code><\/pre>\n<p>\u0422.\u0435. \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u043e\u0435 \u0440.\u0432. \u043a\u0430\u043a \u0447\u0442\u043e-\u0442\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0435 <code>[Ss\u017f][Hh][Ee]<\/code>. \u0418 \u0432\u0441\u0451, \u0447\u0442\u043e \u043e\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 &#8212; \u044d\u0442\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043a\u043b\u0430\u0441\u0441\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043a\u0430\u043a \u0438 \u0432 \u043b\u044e\u0431\u043e\u043c \u0434\u0440\u0443\u0433\u043e\u043c \u0440.\u0432.<\/p>\n<p><a class=\"anchor\" name=\"lit_search\" id=\"lit_search\"><\/a><\/p>\n<h3>\u041f\u043e\u0438\u0441\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432<\/h3>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u0438\u0437\u0432\u043b\u0435\u043a\u043b\u0438 \u043a\u043e\u0435-\u043a\u0430\u043a\u0438\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0438\u0445 \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043a\u0430\u0442\u044c.<\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438 \u044d\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u043c-\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c: \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0441\u0442\u043e\u0433\u0435 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445, \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e. \u041d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432, \u0442.\u043a. \u0443 \u043d\u0430\u0441 \u043e\u043d \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439 \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044c <a href=\"https:\/\/docs.rs\/memchr\/2.*\/memchr\/memmem\/index.html\" rel=\"noopener noreferrer nofollow\"><code>memmem<\/code><\/a> \u0438\u0437 \u043a\u0440\u0435\u0439\u0442\u0430 <a href=\"https:\/\/docs.rs\/memchr\/2.*\/memchr\/\" rel=\"noopener noreferrer nofollow\"><code>memchr<\/code><\/a>.<\/p>\n<p>\u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432, \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u0438\u0437 <code>memchr::memmem<\/code>:<\/p>\n<ul>\n<li>\n<p>\u0415\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Two-way_string-matching_algorithm\" rel=\"noopener noreferrer nofollow\">Two-Way<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430 <code>O(n)<\/code> \u0438 \u0438\u043c\u0435\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043a\u043e\u043c\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 (needle &#8212; \u0438\u0433\u043e\u043b\u043a\u0430, \u0434\u0430\u043b\u0435\u0435 \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u0438.\u0441.) \u0438 \u0441\u0442\u043e\u0433 \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Rabin%E2%80%93Karp_algorithm\" rel=\"noopener noreferrer nofollow\">\u0420\u0430\u0431\u0438\u043d\u0430-\u041a\u0430\u0440\u043f\u0430<\/a>.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 <code>x86_64<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <a href=\"http:\/\/0x80.pl\/articles\/simd-strfind.html\" rel=\"noopener noreferrer nofollow\">&#171;SIMD \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f&#187;<\/a>. \u0412 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u0438\u0437 \u0438.\u0441. (\u043f\u0440\u0438\u043c. &#8212; \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0435 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445), \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438\u0449\u0435\u0442\u0441\u044f \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0431\u0430\u0439\u0442 \u0432 \u043d\u0443\u0436\u043d\u044b\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u044f\u0445. \u041a\u043e\u0433\u0434\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u044d\u0442\u0438 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0441 \u0438.\u0441. (\u0417\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043f\u0440\u0435\u0444\u0438\u043b\u044c\u0442\u0440\u0430. \u041c\u044b \u0441\u043f\u0435\u0440\u0432\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0448\u0430\u0433 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.)<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 SIMD \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u0430\u0439\u0442 \u0432 \u0438.\u0441., \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u0432\u0430 &#171;\u0440\u0435\u0434\u043a\u0438\u0445&#187; \u0431\u0430\u0439\u0442\u0430, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c. \u0422.\u0435. \u043c\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c, \u0447\u0442\u043e \u0431\u0430\u0439\u0442\u044b \u0442\u0438\u043f\u0430 <code>Z<\/code> \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u0436\u0435, \u0447\u0435\u043c \u0431\u0430\u0439\u0442\u044b \u0442\u0438\u043f\u0430 <code>a<\/code>. \u042d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0430\u043a, \u043d\u043e \u043c\u044b \u0442\u0443\u0442 \u043d\u0430 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438. \u042d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u0412\u044b\u0431\u0438\u0440\u0430\u044f \u0431\u0430\u0439\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0440\u0435\u0434\u043a\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0438.\u0441., \u043c\u044b \u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432, \u0437\u0430\u0442\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438, \u0438 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<p>\u0421\u043b\u0443\u0447\u0430\u0439 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435: \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b \u043a\u0430\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u0445 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u043d\u0430\u0434 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f\u043c\u0438 \u0441 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0443\u0442 \u043f\u043e\u0437\u0436\u0435. \u0422\u0430\u043a \u0436\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0435\u0440\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u044b. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/BurntSushi\/aho-corasick\/tree\/97e48b6dbdf9ebd50168540276fa3f14f403d42b\/src\/packed\/teddy\" rel=\"noopener noreferrer nofollow\">Teddy<\/a>, \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u043d\u043e\u0439 \u0438\u0437 <a href=\"https:\/\/github.com\/intel\/hyperscan\" rel=\"noopener noreferrer nofollow\">Hyperscan<\/a>. \u041d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0438\u0445 \u0434\u043b\u044f \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Aho%E2%80%93Corasick_algorithm\" rel=\"noopener noreferrer nofollow\">\u0410\u0445\u043e-\u041a\u043e\u0440\u0430\u0441\u0438\u043a<\/a> \u0442\u0430\u043a \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u0445\u043e\u0442\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432. \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410, \u0442.\u043a. \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0445\u043e\u0436\u0430\u044f. \u0410\u0445\u043e-\u041a\u043e\u0440\u0430\u0441\u0438\u043a \u0432\u0441\u0451 \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0435\u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410. \u041d\u0443 \u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0410\u0445\u043e-\u041a\u043e\u0440\u0430\u0441\u0438\u043a \u043b\u0443\u0447\u0448\u0435 \u043b\u0435\u043d\u0438\u0432\u043e\u0433\u043e \u0414\u041a\u0410, \u043a\u043e\u0433\u0434\u0430 \u0447\u0438\u0441\u043b\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u044d\u043a\u0441\u0442\u0440\u0435\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 (\u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0442\u044b\u0441\u044f\u0447).<\/p>\n<p>\u0414\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c.<\/p>\n<p><a class=\"anchor\" name=\"nfa_data_type\" id=\"nfa_data_type\"><\/a><\/p>\n<h2>\u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 &#8212; \u041d\u041a\u0410<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code> \u0438 \u0431\u044b\u043b \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u043e, \u043f\u043e \u0432\u0441\u0435\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438, \u044d\u0442\u043e \u0431\u044b\u043b \u0431\u044b <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/nfa\/thompson\/struct.NFA.html\" rel=\"noopener noreferrer nofollow\"><code>\u041d\u041a\u0410 (\u041d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0410\u0432\u0442\u043e\u043c\u0430\u0442)<\/code><\/a>. \u0415\u0441\u043b\u0438 \u0442\u043e\u0447\u043d\u0435\u0435, \u044d\u0442\u043e \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d \u0431\u044b\u043b \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c, \u0441\u0445\u043e\u0436\u0438\u043c \u0441 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Thompson%27s_construction\" rel=\"noopener noreferrer nofollow\">\u0422\u043e\u043c\u043f\u0441\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a>. \u042d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0442\u0440\u043e\u0438\u0442 \u041d\u041a\u0410 \u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440.\u0432. \u0437\u0430 \u0432\u0440\u0435\u043c\u044f <code>O(m)<\/code>, \u0433\u0434\u0435 <code>m<\/code> \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0440.\u0432. \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f. (\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>a{5}<\/code> &#8212; \u044d\u0442\u043e <code>aaaaa<\/code>.) \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0438\u043f \u0440.\u0432. \u0432 \u043c\u0438\u043d\u0438-\u041d\u041a\u0410, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043c\u0438\u043d\u0438-\u041d\u041a\u0410 \u0432 \u043e\u0434\u0438\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u041d\u041a\u0410.<\/p>\n<p>\u041d\u041a\u0410 &#8212; \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043a\u0430\u043a \u0435\u0441\u0442\u044c, \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432. (\u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439). \u041d\u043e \u041d\u041a\u0410 \u0442\u0430\u043a \u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0438\u043f\u044b (\u0442\u0430\u043a\u0438\u0435, \u043a\u0430\u043a \u0414\u041a\u0410 (\u0414\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0410\u0432\u0442\u043e\u043c\u0430\u0442)), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432. \u041f\u043e \u0441\u0443\u0442\u0438, \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432. \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex-automata<\/code>, \u0442\u043e \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u041d\u041a\u0410 \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e, \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<p><a class=\"anchor\" name=\"nfa_simple_example\" id=\"nfa_simple_example\"><\/a><\/p>\n<h3>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u041d\u041a\u0410<\/h3>\n<p>\u0422\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432, <code>regex-cli<\/code> \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u041d\u041a\u0410 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440.\u0432.:<\/p>\n<pre><code>$ regex-cli debug thompson 'a'         parse time:  9.856\u00b5s     translate time:  3.005\u00b5s   compile nfa time:  18.51\u00b5s             memory:  700             states:  6        pattern len:  1        capture len:  1         has empty?:  false           is utf8?:  true        is reverse?:  false    line terminator:  \"\\n\"        lookset any:  \u2205 lookset prefix any:  \u2205 lookset prefix all:  \u2205  thompson::NFA( >000000: binary-union(2, 1)  000001: \\x00-\\xFF => 0 ^000002: capture(pid=0, group=0, slot=0) => 3  000003: a => 4  000004: capture(pid=0, group=0, slot=1) => 5  000005: MATCH(0)  transition equivalence classes: ByteClasses(0 => [\\x00-`], 1 => [a], 2 => [b-\\xFF], 3 => [EOI]) ) <\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u044f \u0431\u0443\u0434\u0443 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u041d\u041a\u0410. \u0422\u0430\u043a \u0447\u0442\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044e, \u0447\u0442\u043e \u0442\u0443\u0442 \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u044b\u0432\u043e\u0434:<\/p>\n<ul>\n<li>\n<p>\u0422\u0430\u0439\u043c\u0438\u043d\u0433\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0438 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 &#8212; \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <code>Ast<\/code> \u0438 <code>Hir<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>compile nfa time<\/code> &#8212; \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 <code>NFA<\/code> \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>Hir<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>memory<\/code> &#8212; \u043e\u0431\u044a\u0451\u043c \u043a\u0443\u0447\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u041d\u041a\u0410<\/p>\n<\/li>\n<li>\n<p><code>states<\/code> &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0432 \u041d\u041a\u0410<\/p>\n<\/li>\n<li>\n<p><code>pattern len<\/code> &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0432 \u041d\u041a\u0410<\/p>\n<\/li>\n<li>\n<p><code>capture len<\/code> &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430 (\u0434\u0430\u043b\u0435\u0435 &#8212; \u0433.\u0437.), \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u041d\u041a\u0410. \u041a\u043e\u0433\u0434\u0430 \u0433.\u0437. \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u044b (\u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e \u0442\u0430\u043a), \u0442\u043e\u0433\u0434\u0430 \u0432 \u041d\u041a\u0410 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u043d\u0430 \u0433.\u0437., \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0432\u0441\u0435\u043c\u0443 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044e.<\/p>\n<\/li>\n<li>\n<p><code>has empty?<\/code> &#8212; \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u041d\u041a\u0410 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043d\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p><code>is utf8?<\/code> &#8212; \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043b\u0438 \u041d\u041a\u0410 \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u0435\u0440\u043d\u0451\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0443\u044e UTF-8 \u0441\u0442\u0440\u043e\u043a\u0443. \u042d\u0442\u043e \u0442\u0430\u043a \u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 code units \u0432 UTF-8 codepoint. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, ? \u0432 \u044e\u043d\u0438\u043a\u043e\u0434\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a <code>\\xF0\\x9F\\x92\\xA9<\/code>. \u0412 \u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043a\u0430\u043a \u043f\u0443\u0441\u0442\u043e\u0435 \u0440.\u0432. \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u041d\u041a\u0410 \u0432 UTF-8 \u0440\u0435\u0436\u0438\u043c\u0435 \u0432\u0435\u0440\u043d\u0451\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434 <code>\\xF0<\/code> \u0438 \u043f\u043e\u0441\u043b\u0435 <code>\\xA9<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>is reverse?<\/code> &#8212; \u0432\u0435\u0440\u043d\u0451\u0442 \u043b\u0438 \u041d\u041a\u0410 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0432\u0451\u0440\u043d\u0443\u0442\u043e\u0433\u043e \u0440.\u0432. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u041d\u041a\u0410 \u0432\u0435\u0440\u043d\u0451\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u0440.\u0432., \u043d\u043e \u0435\u0441\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u044f\u0437\u044b\u043a\u0430 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u044b \u0437\u0430\u0434\u043e\u043c \u043d\u0430\u043f\u0435\u0440\u0451\u0434.<\/p>\n<\/li>\n<li>\n<p><code>line terminator<\/code> &#8212; \u0441\u0438\u043c\u0432\u043e\u043b \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440.\u0432. <code>(?m:^)<\/code>, <code>(?m:$)<\/code> \u0438 <code>.<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>lookset any<\/code> &#8212; \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0435\u0445 \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 (look-around assertions) \u0432 \u0440.\u0432.<\/p>\n<\/li>\n<li>\n<p><code>lookset prefix any<\/code> &#8212; \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0435\u0445 \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 (look-around assertions), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0435 \u0440.\u0432. \u041f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0432\u043f\u0430\u0441\u0442\u044c \u043d\u043e\u043b\u044c \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u044d\u0442\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><code>transition equivalence classes<\/code> &#8212; \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438. \u0421\u043c\u044b\u0441\u043b \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043a\u0430\u043a \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0449\u0451 \u0432\u044b\u0432\u0435\u0434\u0435\u043d \u0438 \u0441\u0430\u043c \u041d\u041a\u0410. \u041f\u0440\u043e\u0431\u0435\u0436\u0438\u043c\u0441\u044f \u043f\u043e \u043d\u0435\u043c\u0443:<\/p>\n<pre><code>>000000: binary-union(2, 1)  000001: \\x00-\\xFF => 0 ^000002: capture(pid=0, group=0, slot=0) => 3  000003: a => 4  000004: capture(pid=0, group=0, slot=1) => 5  000005: MATCH(0) <\/code><\/pre>\n<p>\u0426\u0438\u0440\u043a\u0443\u043c\u0444\u043b\u0435\u043a\u0441 (<code>^<\/code>) \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c <code>2<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e &#171;\u044f\u043a\u043e\u0440\u043d\u043e\u0435&#187; (&#171;anchored&#187;) \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043a\u0430\u043a \u0437\u043d\u0430\u043a \u0431\u043e\u043b\u044c\u0448\u0435 (<code>><\/code>) \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c <code>0<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e &#171;\u043d\u0435\u044f\u043a\u043e\u0440\u043d\u043e\u0435&#187; (&#171;unanchored&#187;) \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u041f\u0435\u0440\u0432\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u044f\u043a\u043e\u0440\u0435\u0439 (\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a), \u0430 \u0432\u0442\u043e\u0440\u043e\u0435 &#8212; \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 \u044f\u043a\u043e\u0440\u0435\u0439.<\/p>\n<p>\u041d\u0435\u044f\u043a\u043e\u0440\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 <code>binary-union(2, 1)<\/code>: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u041d\u041a\u0410 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>2<\/code> (\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 &#8212; <code>capture<\/code> state), \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u043d\u0435\u0443\u0441\u043f\u0435\u0445\u043e\u043c, \u0442\u043e \u041d\u041a\u0410 \u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>1<\/code>. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>1<\/code> \u043c\u0430\u0442\u0447\u0438\u0442 (\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435) \u043b\u044e\u0431\u043e\u0439 \u0431\u0430\u0439\u0442, \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>0<\/code>. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f <code>0<\/code> \u0438 <code>1<\/code> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u043d\u0435\u044f\u0432\u043d\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 <code>(?s-u:.)*?<\/code> \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0440.\u0432., \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u043e\u0433\u0430 (\u043f\u0440\u0438\u043c.: \u0441\u0442\u043e\u0433 &#8212; \u0442\u0435\u043a\u0441\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a).<\/p>\n<p>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>capture<\/code> &#8212; \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0440\u0430\u0434\u0438 \u043f\u043e\u0431\u043e\u0447\u043d\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430: \u043e\u043d \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0443\u044e \u041d\u041a\u0410, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u0441\u043b\u043e\u0442, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432 \u044d\u0442\u043e\u043c <code>capture<\/code> \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u041d\u041a\u0410 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0432\u043d\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b (\u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0433.\u0437.), \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f <code>capture<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u0438\u0445 \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a \u043e\u043d\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Powerset_construction\" rel=\"noopener noreferrer nofollow\">\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0437\u0430\u0446\u0438\u0438<\/a> &#8212; \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u041d\u041a\u0410 \u0432 \u0414\u041a\u0410.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u041d\u041a\u0410 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <code>3<\/code>, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u0430\u0439\u0442\u0430 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0430 \u0435\u0433\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u0443 <code>a<\/code>, \u0438 \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u0430, \u041d\u041a\u0410 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>4<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u043d\u0438\u043c <code>capture<\/code> \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c. \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u0430\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>5<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u043f\u043e\u0434 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c <code>0<\/code>.<\/p>\n<p><a class=\"anchor\" name=\"nfa_sparse_state\" id=\"nfa_sparse_state\"><\/a><\/p>\n<h3>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u041d\u041a\u0410: \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f<\/h3>\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u043f\u0440\u043e\u0438\u0441\u0442\u0435\u043a\u0430\u0435\u0442 \u0438\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0434\u043b\u044f \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432. \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f: \u0432\u0440\u0435\u043c\u044f \u0435\u0433\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <code>O(m)<\/code>, \u043d\u043e \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u0441\u0447\u0451\u0442 \u043e\u0447\u0435\u043d\u044c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432. \u042d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b &#8212; \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u041d\u041a\u0410, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a \u0447\u0435\u0440\u0435\u0437 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u041d\u041a\u0410 \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445 (\u0414\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 &#8212; \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u041d\u041a\u0410 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0443 \u0438\u0437 \u0441\u0442\u043e\u0433\u0430.)<\/p>\n<p>\u0422\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439? \u041a\u043e\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0445\u043e\u0434 \u041d\u041a\u0410 (\u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u043b\u0438 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0432\u0440\u043e\u0434\u0435 \u0414\u041a\u0410), \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0435\u0441\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u041d\u041a\u0410 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0447\u0442\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435\u043c, \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u044c (\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u041d\u041a\u0410 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f), \u0435\u0441\u043b\u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0432 \u043a\u0430\u043a\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u041d\u041a\u0410, \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437. \u042d\u043f\u0441\u0438\u043b\u043e\u043d-\u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u0438\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c \u0442\u0438\u043f\u0430 <code>^<\/code>, <code>$<\/code> \u0438 <code>\\b<\/code>.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043b \u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435 \u041d\u041a\u0410. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code> \u0432\u0435\u0440\u0441\u0438\u0438 \u043c\u043b\u0430\u0434\u0448\u0435 <code>1.9<\/code> \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 \u0440.\u0432. <code>[A-Za-z0-9]<\/code>:<\/p>\n<pre><code>$ regex-debug compile --bytes '[A-Za-z0-9]' 0000 Save(0) (start) 0001 Split(2, 3) 0002 Bytes(0, 9) (goto: 6) 0003 Split(4, 5) 0004 Bytes(A, Z) (goto: 6) 0005 Bytes(a, z) 0006 Save(1) 0007 Match(0) <\/code><\/pre>\n<p>(\u0417\u0430\u043c\u0435\u0442\u043a\u0430: <code>regex-debug<\/code> &#8212; \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u0440\u0435\u0439\u0442\u043e\u043c <code>regex<\/code>. \u041e\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430, \u0445\u043e\u0442\u044f \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u044b\u0439 \u0442\u0435\u0433 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043a\u0440\u0435\u0439\u0442\u0430 \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0435\u0451.)<\/p>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>Split<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u041d\u041a\u0410 \u0441 \u0434\u0432\u0443\u043c\u044f \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u043c\u0438 \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u043c\u0438 (\u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>binary-union<\/code> \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043f\u043e\u0434\u0433\u043b\u0430\u0432\u0435). \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>Save<\/code> \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0433.\u0437., \u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>Bytes<\/code> &#8212; \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u0441\u0442\u043e\u0433\u0430 \u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0441 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u043c \u0431\u0430\u0439\u0442\u043e\u043c \u0438\u043b\u0438 \u043d\u0430 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0432 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0431\u0430\u0439\u0442. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0447\u0435\u0440\u0435\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 <code>Split<\/code>. \u0422\u0430\u043a \u0436\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f <code>0<\/code> \u0440\u0430\u0432\u043d\u043e <code>{1, 2, 3, 4, 5}<\/code> (\u043f\u0440\u0438\u043c.: \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u044d\u0442\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u041d\u041a\u0410 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0432 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0441\u0442\u043e\u0433\u0430).<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u041d\u041a\u0410:<\/p>\n<pre><code>$ regex-cli debug thompson --no-table '[A-Za-z0-9]' thompson::NFA( >000000: binary-union(2, 1)  000001: \\x00-\\xFF => 0 ^000002: capture(pid=0, group=0, slot=0) => 3  000003: sparse(0-9 => 4, A-Z => 4, a-z => 4)  000004: capture(pid=0, group=0, slot=1) => 5  000005: MATCH(0) ) <\/code><\/pre>\n<p>(\u041c\u043e\u0436\u043d\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f <code>0<\/code> \u0438 <code>1<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0441\u0442\u0430\u0440\u044b\u0439 \u041d\u041a\u0410 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441.)<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c, \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432, \u0443 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u041d\u041a\u0410 <code>sparse<\/code>. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 <code>sparse<\/code> (\u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0439) \u043e\u0442\u0441\u044b\u043b\u0430\u0435\u0442 \u043a \u0442\u043e\u043c\u0443 \u0444\u0430\u043a\u0442\u0443, \u0447\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041e\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0438\u043c\u0435\u0435\u0442 \u043b\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0441\u0442\u043e\u0433\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0438\u043b\u0438 \u043d\u0435\u0442 (\u0442.\u0435. \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u0438\u043b\u0438 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0435\u0441\u0442\u044c \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b \u0438\u043b\u0438 \u043d\u0435\u0442). \u0422.\u043e. \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u0445 <code>Split<\/code> \u0432 \u0441\u0442\u0430\u0440\u043e\u043c \u041d\u041a\u0410, \u043d\u043e \u0443\u0436\u0435 \u0431\u0435\u0437 \u044f\u0432\u043d\u044b\u0445 \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043c\u0435\u043d\u044c\u0448\u0438\u043c \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u043c \u0440\u0430\u0441\u0445\u043e\u0434\u0430\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 <code>Split<\/code>. \u0417\u0434\u0435\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0441\u0442\u043e\u0433\u0430 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (\u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u041d\u041a\u0410) \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u0435\u0448-\u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u043e\u043c\u0443 \u0440\u0430\u0441\u0445\u043e\u0434\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0437 \u043a\u0443\u0447\u0438. \u041d\u043e \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432\u044b\u0448\u0435. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u0443\u0431\u0440\u0430\u043d\u044b.<\/p>\n<p><a class=\"anchor\" name=\"nfa_utf8_minimal\" id=\"nfa_utf8_minimal\"><\/a><\/p>\n<h3>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u041d\u041a\u0410: \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0434\u043b\u044f UTF-8<\/h3>\n<p>\u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u041d\u041a\u0410 \u0431\u044b\u043b\u043e \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u043c\u043e\u0433 \u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u0430 \u041d\u041a\u0410: \u041d\u041a\u0410, \u0430\u043b\u0444\u0430\u0432\u0438\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u044b\u043b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d \u0447\u0435\u0440\u0435\u0437 Unicode code points, \u0438 \u041d\u041a\u0410, \u0430\u043b\u0444\u0430\u0432\u0438\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u044b\u043b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d \u0447\u0435\u0440\u0435\u0437 \u0431\u0430\u0439\u0442\u044b. (\u0412 \u0442\u0430\u043a\u0438\u0445 \u0431\u0430\u0439\u0442-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u041d\u041a\u0410 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e UTF-8 code units, \u043d\u043e \u0434\u0430\u0436\u0435 \u0431\u0430\u0439\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c\u0438 UTF-8 code point-\u0430\u043c\u0438, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \\xFF.) \u042e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u0435 \u041d\u041a\u0410 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432. \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u041d\u041a\u0410 (\u0442\u0430\u043a\u0438\u0445, \u043a\u0430\u043a <code>PikeVM<\/code> \u0438\u043b\u0438 <code>BoundedBacktracker<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043e\u0441\u043d\u0451\u043c\u0441\u044f \u043f\u043e\u0437\u0434\u043d\u0435\u0435), \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043a\u0430\u043a \u0431\u0430\u0439\u0442-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u041d\u041a\u0410 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043b\u0435\u043d\u0438\u0432\u043e\u0433\u043e \u0414\u041a\u0410. \u0411\u0430\u0439\u0442-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u041d\u041a\u0410 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u043e\u043c, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0447\u0435\u0440\u0435\u0437 \u0431\u0430\u0439\u0442\u044b. \u0418\u043d\u0430\u0447\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0442\u0440\u0443\u0434\u043d\u043e\u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043c\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. (\u0411\u0430\u0439\u0442-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u041d\u041a\u0410 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0441 \u0434\u0432\u0438\u0436\u043a\u0430\u043c\u0438 \u0440.\u0432. \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u041d\u041a\u0410, \u043d\u043e \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0440.\u0432. \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438, \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u0432 UTF-8, \u0438 \u0442.\u043e. \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u042e\u043d\u0438\u043a\u043e\u0434 \u0430\u043b\u0444\u0430\u0432\u0438\u0442.)<\/p>\n<p>\u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043a \u0442\u0440\u0451\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c. \u041f\u0435\u0440\u0432\u0430\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u0430\u0439\u0442-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u041d\u041a\u0410 \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u043b\u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0438\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430\u0441\u044c \u0440\u0430\u043d\u0435\u0435. \u042d\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0431\u0430\u0439\u0442-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u041d\u041a\u0410 \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u043c\u0435\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 <code>Split<\/code>, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043a\u0430\u043a \u042e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u0435 \u041d\u041a\u0410 \u0431\u044b\u043b\u0438 \u043f\u043e\u0445\u043e\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0430 \u041d\u041a\u0410 \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c <code>sparse<\/code> \u0438\u0437 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>$ regex-debug compile '[A-Za-z0-9]' 0000 Save(0) (start) 0001 '0'-'9', 'A'-'Z', 'a'-'z' 0002 Save(1) 0003 Match(0) <\/code><\/pre>\n<p>\u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u0442\u0443\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 <code>Split<\/code>.<\/p>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u044b\u0442\u0435\u043a\u0430\u043b\u0430 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439: \u0442.\u043a. \u0431\u0430\u0439\u0442-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u041d\u041a\u0410 \u043e\u0431\u044b\u0447\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0430 \u0442\u0438\u043f\u0430 \u041d\u041a\u0410, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u042e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u0439 \u041d\u041a\u0410 \u0441 \u041d\u041a\u0410 \u0434\u0432\u0438\u0436\u043a\u0430\u043c\u0438 \u0440.\u0432. \u0438 \u0431\u0430\u0439\u0442-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u041d\u041a\u0410 \u0441 \u043b\u0435\u043d\u0438\u0432\u044b\u043c \u0414\u041a\u0410. \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u044d\u0442\u043e \u0440\u0430\u0441\u0442\u043e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0422\u0440\u0435\u0442\u044c\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u041d\u041a\u0410 \u0434\u0432\u0438\u0436\u043a\u0430\u043c \u0440.\u0432. \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0441 \u042e\u043d\u0438\u043a\u043e\u0434\u043d\u043e\u0439, \u0442\u0430\u043a \u0438 \u0441 \u0431\u0430\u0439\u0442-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u041d\u041a\u0410. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u0431\u0430\u0433\u043e\u0432. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0433\u043b\u0430\u0434\u0438\u0442\u044c \u043b\u0443\u0447\u0448\u0438\u043c \u0434\u0438\u0437\u0430\u0439\u043d\u043e\u043c, \u043d\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a\u043e\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u044d\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u043a UTF-8 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430\u043c? \u041e\u0442 \u0431\u0430\u0439\u0442-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u041d\u041a\u0410 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u042e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438. \u041d\u043e \u0435\u0441\u043b\u0438 \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0431\u0430\u0439\u0442\u044b, \u0430 \u043d\u0435 code points, \u0442\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c? \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u0435\u043c UTF-8 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0432 \u041d\u041a\u0410. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u041d\u041a\u0410 (\u0438\u0437 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u043b\u044e\u0431\u043e\u0435 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u042e\u043d\u0438\u043a\u043e\u0434 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 UTF-8:<\/p>\n<pre><code>$ regex-cli debug thompson --no-table '(?s:.)' thompson::NFA( >000000: binary-union(2, 1)  000001: \\x00-\\xFF => 0 ^000002: capture(pid=0, group=0, slot=0) => 10  000003: \\x80-\\xBF => 11  000004: \\xA0-\\xBF => 3  000005: \\x80-\\xBF => 3  000006: \\x80-\\x9F => 3  000007: \\x90-\\xBF => 5  000008: \\x80-\\xBF => 5  000009: \\x80-\\x8F => 5  000010: sparse(\\x00-\\x7F => 11, \\xC2-\\xDF => 3, \\xE0 => 4, \\xE1-\\xEC => 5, \\xED => 6, \\xEE-\\xEF => 5, \\xF0 => 7, \\xF1-\\xF3 => 8, \\xF4 => 9)  000011: capture(pid=0, group=0, slot=1) => 12  000012: MATCH(0) ) <\/code><\/pre>\n<p>\u042d\u0442\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u042e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u0445 code point-\u043e\u0432 \u0438 \u0437\u0430\u0442\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0430\u0439\u0442-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442 UTF-8 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 \u044d\u0442\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 code point-\u043e\u0432. \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/docs.rs\/regex-syntax\/0.7.*\/regex_syntax\/utf8\/index.html\" rel=\"noopener noreferrer nofollow\">\u043c\u043e\u0434\u0443\u043b\u0435\u043c <code>utf8<\/code> \u0438\u0437 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex-syntax<\/code><\/a>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u0431\u044b \u0440.\u0432. <code>(?s:.)<\/code>:<\/p>\n<pre><code>[0-7F] [C2-DF][80-BF] [E0][A0-BF][80-BF] [E1-EC][80-BF][80-BF] [ED][80-9F][80-BF] [EE-EF][80-BF][80-BF] [F0][90-BF][80-BF][80-BF] [F1-F3][80-BF][80-BF][80-BF] [F4][80-8F][80-BF][80-BF] <\/code><\/pre>\n<p>\u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u041d\u041a\u0410 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432. \u0412\u0440\u043e\u0434\u0435 \u044d\u0442\u043e\u0433\u043e:<\/p>\n<pre><code>[0-7F]|[C2-DF][80-BF]|...|[F4][80-8F][80-BF][80-BF] <\/code><\/pre>\n<p>\u0418 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u044d\u0442\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u041d\u041a\u0410 \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432. \u042f\u0441\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u042e\u043d\u0438\u043a\u043e\u0434\u043e\u043c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u044d\u043a\u0441\u0442\u0440\u0435\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0432 \u0440.\u0432. \u041a\u043b\u0430\u0441\u0441\u044b \u0442\u0438\u043f\u0430 <code>\\w<\/code>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 139 612 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 code point-\u0430 (\u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f). ASCII \u0432\u0435\u0440\u0441\u0438\u044f <code>\\w<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e <code>63<\/code> code point-\u0430. \u042d\u0442\u043e \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430, \u0438 \u0442\u0440\u044e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0440\u043e\u0434\u0435 63 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0447\u0438\u0441\u0435\u043b \u0432\u0440\u043e\u0434\u0435 139 612.<\/p>\n<p>\u0421\u0442\u0430\u0440\u044b\u0439 \u043a\u0440\u0435\u0439\u0442 \u043d\u0435 \u043d\u0430\u0438\u0432\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b UTF-8 \u0430\u0432\u0442\u043e\u043c\u0430\u0442, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0448\u0435. \u041d\u0430\u043f\u0440\u043e\u0442\u0438\u0432, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0432 \u043a\u043b\u0430\u0441\u0441\u0430\u0445, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u043c <code>utf8<\/code>. \u0421\u0442\u0430\u0440\u044b\u0439 \u043a\u0440\u0435\u0439\u0442 \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u043b \u0438 \u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0440.\u0432. \u0437\u0430 \u0441\u0447\u0451\u0442 \u043e\u0431\u0449\u0438\u0445 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043e\u0432, \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044f \u0438\u0445 \u043f\u0440\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041d\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u044d\u043a\u0441\u0442\u0440\u0435\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u041d\u041a\u0410:<\/p>\n<pre><code>$ regex-debug compile --bytes '\\w' | tail -n20 3545 Bytes(\\xb0, \\xb0) (goto: 3466) 3546 Bytes(\\xf0, \\xf0) (goto: 3545) 3547 Split(3550, 3551) 3548 Bytes(\\x80, \\x8c) (goto: 28) 3549 Bytes(\\xb1, \\xb1) (goto: 3548) 3550 Bytes(\\xf0, \\xf0) (goto: 3549) 3551 Split(3554, 3555) 3552 Bytes(\\x8d, \\x8d) (goto: 2431) 3553 Bytes(\\xb1, \\xb1) (goto: 3552) 3554 Bytes(\\xf0, \\xf0) (goto: 3553) 3555 Split(3558, 3562) 3556 Bytes(\\x84, \\x86) (goto: 28) 3557 Bytes(\\xa0, \\xa0) (goto: 3556) 3558 Bytes(\\xf3, \\xf3) (goto: 3557) 3559 Bytes(\\x80, \\xaf) (goto: 3563) 3560 Bytes(\\x87, \\x87) (goto: 3559) 3561 Bytes(\\xa0, \\xa0) (goto: 3560) 3562 Bytes(\\xf3, \\xf3) (goto: 3561) 3563 Save(1) 3564 Match(0) <\/code><\/pre>\n<p>\u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u0442\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 20 \u0441\u0442\u0440\u043e\u043a \u0432\u044b\u0432\u043e\u0434\u0430. \u041d\u043e \u0432 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c \u041d\u041a\u0410 \u043d\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f 3 564 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0423\u0445. \u0418 \u0432\u0435\u0437\u0434\u0435 \u0435\u0449\u0451 \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b. \u042d\u0442\u043e \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0430\u0436\u0430, \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u0440\u0435\u0439\u0442 \u0442\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u0432\u044b\u0440\u0443\u0447\u0430\u043b, \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u0414\u041a\u0410.<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u041d\u041a\u0410:<\/p>\n<pre><code>$ regex-cli debug thompson --no-table '\\w' | tail -n20  000292: \\xB0-\\xB9 => 310  000293: sparse(\\x84 => 115, \\x85 => 291, \\x86 => 210, \\xAF => 292)  000294: \\x80-\\x9F => 310  000295: sparse(\\x80-\\x9A => 5, \\x9B => 294, \\x9C-\\xBF => 5)  000296: sparse(\\x80-\\x9B => 5, \\x9C => 282, \\x9D-\\x9F => 5, \\xA0 => 55, \\xA1-\\xBF => 5)  000297: sparse(\\x80-\\xA1 => 310, \\xB0-\\xBF => 310)  000298: sparse(\\x80-\\xB9 => 5, \\xBA => 297, \\xBB-\\xBF => 5)  000299: \\x80-\\xA0 => 310  000300: sparse(\\x80-\\xAE => 5, \\xAF => 299)  000301: \\x80-\\x9D => 310  000302: sparse(\\xA0-\\xA7 => 5, \\xA8 => 301)  000303: sparse(\\x80-\\x8A => 310, \\x90-\\xBF => 310)  000304: sparse(\\x80-\\x8C => 5, \\x8D => 303, \\x8E-\\xBF => 5)  000305: sparse(\\x80-\\x8D => 5, \\x8E => 236)  000306: sparse(\\x90 => 193, \\x91 => 231, \\x92 => 235, \\x93 => 238, \\x94 => 239, \\x96 => 247, \\x97 => 118, \\x98 => 248, \\x9A => 250, \\x9B => 256, \\x9C => 257, \\x9D => 276, \\x9E => 290, \\x9F => 293, \\xA0-\\xA9 => 118, \\xAA => 295, \\xAB => 296, \\xAC => 298, \\xAD => 118, \\xAE => 300, \\xAF => 302, \\xB0 => 118, \\xB1 => 304, \\xB2 => 305)  000307: sparse(\\x84-\\x86 => 5, \\x87 => 236)  000308: \\xA0 => 307  000309: sparse(0-9 => 310, A-Z => 310, _ => 310, a-z => 310, \\xC2 => 3, \\xC3 => 4, \\xC4-\\xCA => 5, \\xCB => 6, \\xCC => 5, \\xCD => 7, \\xCE => 8, \\xCF => 9, \\xD0-\\xD1 => 5, \\xD2 => 10, \\xD3 => 5, \\xD4 => 11, \\xD5 => 12, \\xD6 => 13, \\xD7 => 14, \\xD8 => 15, \\xD9 => 16, \\xDA => 5, \\xDB => 17, \\xDC => 18, \\xDD => 19, \\xDE => 20, \\xDF => 21, \\xE0 => 53, \\xE1 => 93, \\xE2 => 109, \\xE3 => 116, \\xE4 => 117, \\xE5-\\xE9 => 118, \\xEA => 137, \\xEB-\\xEC => 118, \\xED => 140, \\xEF => 155, \\xF0 => 306, \\xF3 => 308)  000310: capture(pid=0, group=0, slot=1) => 311  000311: MATCH(0) <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u043d\u043e \u0442\u0430\u043a \u0436\u0435 <em>\u043d\u0443\u043b\u044c<\/em> \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432. \u0427\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 <code>sparse<\/code> \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435. \u041d\u043e \u0442\u0430\u043a\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430 \u0441\u0447\u0451\u0442 \u044d\u0442\u043e\u0433\u043e.<\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u041d\u041a\u0410 \u0434\u043e\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <a href=\"https:\/\/blog.burntsushi.net\/transducers\/#references\" rel=\"noopener noreferrer nofollow\">\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0414\u0430\u0446\u0443\u043a\u0430<\/a> \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0414\u041a\u0410 \u0438\u0437 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0435\u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u042d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044f <code>utf8<\/code>. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043d\u0430\u043c \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0414\u041a\u0410, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0436\u0435\u0440\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e\u0439 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e, \u0447\u0442\u043e\u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043e\u0431\u044a\u0451\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u041d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 (\u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e) \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u043c\u043e\u0434\u0443\u043b\u044f <code>utf8<\/code> \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0414\u0430\u0446\u0443\u043a\u0430 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 \u043d\u0438\u043c. \u0427\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u043e, \u044f \u0441\u043e\u0437\u0434\u0430\u043b \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0443\u044e \u0434\u0435\u0440\u0435\u0432\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432 (range trie), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044f <code>utf8<\/code> \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u044b\u043b\u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u043b\u0438\u0441\u044c. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0414\u0430\u0446\u0443\u043a\u0430, \u043a\u0430\u043a \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043d\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u041d\u041a\u0410. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u0435\u0437 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0441\u0436\u0430\u0442\u0438\u044f (reverse shrinking):<\/p>\n<pre><code>$ regex-cli debug thompson --no-table --no-captures '\\w' -r | tail -n20  001367: \\xB1 => 722  001368: \\x80-\\x8C => 1367  001369: \\x80-\\xBF => 1368  001370: \\x8D => 1367  001371: \\x80-\\x8A => 1370  001372: \\x90-\\xBF => 1370  001373: \\x8E-\\xBF => 1367  001374: \\x80-\\xBF => 1373  001375: \\xB2 => 722  001376: \\x80-\\x8D => 1375  001377: \\x80-\\xBF => 1376  001378: \\x8E => 1375  001379: \\x80-\\xAF => 1378  001380: \\xF3 => 1386  001381: \\xA0 => 1380  001382: \\x84-\\x86 => 1381  001383: \\x80-\\xBF => 1382  001384: \\x87 => 1381  001385: \\x80-\\xAF => 1384  001386: MATCH(0)  <\/code><\/pre>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0441 \u043d\u0438\u043c:<\/p>\n<pre><code>$ regex-cli debug thompson --no-table --no-captures '\\w' -r --shrink | tail -n20  000469: sparse(\\x90 => 2, \\x92 => 2, \\x97 => 2, \\xA0-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xB0 => 2, \\xB1 => 2, \\xE3 => 488, \\xE4 => 488, \\xE5-\\xE9 => 488, \\xEA => 488,  \\xEB-\\xEC => 488, \\xEF => 488)  000470: sparse(\\x97 => 2, \\x9A => 2, \\xA0-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xB0 => 2, \\xB1 => 2, \\xE3 => 488, \\xE4 => 488, \\xE5-\\xE9 => 488, \\xEA => 488, \\xEB-\\xEC => 488)  000471: sparse(\\x80 => 3, \\x81 => 387, \\x82 => 6, \\x83 => 387, \\x84 => 397, \\x85 => 451, \\x86 => 174, \\x87 => 6, \\x88 => 100, \\x89 => 100, \\x8A => 13, \\x8B => 348, \\x8C => 14, \\x8D => 45 2, \\x8E => 16, \\x8F => 88, \\x90 => 19, \\x91 => 62, \\x92 => 20, \\x93 => 343, \\x94 => 21, \\x95 => 62, \\x96 => 23, \\x97 => 61, \\x98 => 179, \\x99 => 27, \\x9A => 27, \\x9B => 441, \\x9C => 446, \\x9D => 236, \\x9E => 28, \\x9F => 461, \\xA0 => 454, \\xA1 => 442, \\xA2 => 31, \\xA3 => 428, \\xA4 => 33, \\xA5 => 467, \\xA6 => 35, \\xA7 => 330, \\xA8 => 455, \\xA9 => 468, \\xAA => 388, \\xAB => 4 43, \\xAC => 43, \\xAD => 414, \\xAE => 84, \\xAF => 447, \\xB0 => 438, \\xB1 => 416, \\xB2 => 363, \\xB3 => 457, \\xB4 => 67, \\xB5 => 340, \\xB6 => 199, \\xB7 => 141, \\xB8 => 465, \\xB9 => 374, \\xBA  => 53, \\xBB => 417, \\xBC => 459, \\xBD => 56, \\xBE => 469, \\xBF => 470, \\xC3 => 488, \\xC4-\\xCA => 488, \\xCC => 488, \\xCD => 488, \\xCE => 488, \\xCF => 488, \\xD0-\\xD1 => 488, \\xD2 => 488, \\ xD3 => 488, \\xD4 => 488, \\xD5 => 488, \\xD6 => 488, \\xD8 => 488, \\xD9 => 488, \\xDA => 488, \\xDC => 488, \\xDD => 488, \\xDF => 488)  000472: sparse(\\x91 => 2, \\x92 => 2, \\x93 => 2, \\x97 => 2, \\x98 => 2, \\x9F => 2, \\xA0 => 7, \\xA1-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xAE => 2, \\xB0 => 2, \\xB1 => 2, \\ xB2 => 2, \\xE1 => 488, \\xE2 => 488, \\xE3 => 488, \\xE4 => 488, \\xE5-\\xE9 => 488, \\xEA => 488, \\xEB-\\xEC => 488, \\xED => 488)  000473: sparse(\\x92 => 2, \\x94 => 2, \\x97 => 2, \\x98 => 2, \\x9D => 2, \\xA0-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xAE => 2, \\xB0 => 2, \\xB1 => 2, \\xE1 => 488, \\xE3 => 48 8, \\xE4 => 488, \\xE5-\\xE9 => 488, \\xEB-\\xEC => 488, \\xED => 488)  000474: sparse(\\x91 => 2, \\x97 => 2, \\x98 => 2, \\xA0-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xB0 => 2, \\xB1 => 2, \\xE2 => 488, \\xE3 => 488, \\xE4 => 488, \\xE5-\\xE9 => 488,  \\xEA => 488, \\xEB-\\xEC => 488, \\xEF => 488)  000475: sparse(\\x90 => 2, \\x91 => 2, \\x96 => 2, \\x97 => 2, \\x9C => 2, \\xA0-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xB0 => 2, \\xB1 => 2, \\xE0 => 488, \\xE1 => 488, \\xE3 => 488, \\xE4 => 488, \\xE5-\\xE9 => 488, \\xEA => 488, \\xEB-\\xEC => 488)  000476: sparse(\\x90 => 2, \\x96 => 2, \\x97 => 2, \\xA0-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xB0 => 2, \\xB1 => 2, \\xE0 => 488, \\xE3 => 488, \\xE4 => 488, \\xE5-\\xE9 => 488,  \\xEA => 488, \\xEB-\\xEC => 488, \\xEF => 488)  000477: sparse(\\x80 => 218, \\x81 => 387, \\x82 => 6, \\x83 => 387, \\x84 => 472, \\x85 => 451, \\x86 => 174, \\x87 => 387, \\x88 => 12, \\x89 => 100, \\x8A => 13, \\x8B => 348, \\x8C => 14, \\x8D =>  452, \\x8E => 16, \\x8F => 426, \\x90 => 19, \\x91 => 62, \\x92 => 20, \\x93 => 473, \\x94 => 21, \\x95 => 62, \\x96 => 23, \\x97 => 61, \\x98 => 179, \\x99 => 157, \\x9A => 27, \\x9B => 441, \\x9C => 446, \\x9D => 236, \\x9E => 28, \\x9F => 461, \\xA0 => 454, \\xA1 => 442, \\xA2 => 31, \\xA3 => 428, \\xA4 => 33, \\xA5 => 467, \\xA6 => 305, \\xA7 => 317, \\xA8 => 463, \\xA9 => 468, \\xAA => 388, \\xA B => 443, \\xAC => 223, \\xAD => 414, \\xAE => 43, \\xAF => 447, \\xB0 => 438, \\xB1 => 474, \\xB2 => 363, \\xB3 => 457, \\xB4 => 140, \\xB5 => 340, \\xB6 => 266, \\xB7 => 141, \\xB8 => 465, \\xB9 => 2 01, \\xBA => 108, \\xBB => 417, \\xBC => 475, \\xBD => 476, \\xBE => 77, \\xBF => 470, \\xC3 => 488, \\xC4-\\xCA => 488, \\xCC => 488, \\xCE => 488, \\xCF => 488, \\xD0-\\xD1 => 488, \\xD2 => 488, \\xD3 => 488, \\xD4 => 488, \\xD5 => 488, \\xD8 => 488, \\xD9 => 488, \\xDA => 488, \\xDC => 488, \\xDD => 488)  000478: sparse(\\x97 => 2, \\x9D => 2, \\xA0-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xAE => 2, \\xB0 => 2, \\xB1 => 2, \\xE3 => 488, \\xE4 => 488, \\xE5-\\xE9 => 488, \\xEA => 488,  \\xEB-\\xEC => 488)  000479: sparse(\\x91 => 2, \\x96 => 2, \\x97 => 2, \\x98 => 2, \\xA0-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xAE => 2, \\xAF => 2, \\xB0 => 2, \\xB1 => 2, \\xE0 => 488, \\xE3 => 48 8, \\xE4 => 488, \\xE5-\\xE9 => 488, \\xEA => 488, \\xEB-\\xEC => 488)  000480: sparse(\\x96 => 2, \\x97 => 2, \\x98 => 2, \\xA0-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xAE => 2, \\xAF => 2, \\xB0 => 2, \\xB1 => 2, \\xE3 => 488, \\xE4 => 488, \\xE5-\\xE 9 => 488, \\xEB-\\xEC => 488, \\xEF => 488)  000481: sparse(\\x90 => 2, \\x97 => 2, \\x98 => 2, \\x9D => 2, \\xA0-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xAE => 2, \\xB0 => 2, \\xB1 => 2, \\xE0 => 488, \\xE1 => 488, \\xE3 => 488, \\xE4 => 488, \\xE5-\\xE9 => 488, \\xEB-\\xEC => 488, \\xEF => 488)  000482: sparse(\\x91 => 2, \\x97 => 2, \\x98 => 2, \\xA0-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xAE => 2, \\xB0 => 2, \\xB1 => 2, \\xE0 => 488, \\xE1 => 488, \\xE3 => 488, \\xE4 = > 488, \\xE5-\\xE9 => 488, \\xEA => 488, \\xEB-\\xEC => 488, \\xEF => 488)  000483: sparse(\\x91 => 2, \\x97 => 2, \\xA0-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xB0 => 2, \\xB1 => 2, \\xE0 => 488, \\xE1 => 488, \\xE2 => 488, \\xE3 => 488, \\xE4 => 488, \\x E5-\\xE9 => 488, \\xEA => 488, \\xEB-\\xEC => 488)  000484: sparse(\\x91 => 2, \\x97 => 2, \\xA0-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xB0 => 2, \\xB1 => 2, \\xE0 => 488, \\xE1 => 488, \\xE2 => 488, \\xE3 => 488, \\xE4 => 488, \\x E5-\\xE9 => 488, \\xEA => 488, \\xEB-\\xEC => 488, \\xEF => 488)  000485: sparse(\\x97 => 2, \\xA0-\\xA9 => 2, \\xAA => 2, \\xAB => 2, \\xAC => 2, \\xAD => 2, \\xB0 => 2, \\xB1 => 2, \\xE3 => 488, \\xE4 => 488, \\xE5-\\xE9 => 488, \\xEA => 488, \\xEB-\\xEC => 488)  000486: sparse(\\x80 => 4, \\x81 => 396, \\x82 => 6, \\x83 => 387, \\x84 => 472, \\x85 => 451, \\x86 => 174, \\x87 => 387, \\x88 => 12, \\x89 => 100, \\x8A => 195, \\x8B => 348, \\x8C => 14, \\x8D => 452, \\x8E => 16, \\x8F => 426, \\x90 => 19, \\x91 => 62, \\x92 => 20, \\x93 => 473, \\x94 => 114, \\x95 => 62, \\x96 => 23, \\x97 => 61, \\x98 => 179, \\x99 => 27, \\x9A => 27, \\x9B => 441, \\x9C => 4 46, \\x9D => 236, \\x9E => 28, \\x9F => 478, \\xA0 => 462, \\xA1 => 442, \\xA2 => 31, \\xA3 => 479, \\xA4 => 33, \\xA5 => 467, \\xA6 => 305, \\xA7 => 480, \\xA8 => 481, \\xA9 => 399, \\xAA => 482, \\xAB  => 443, \\xAC => 43, \\xAD => 414, \\xAE => 43, \\xAF => 447, \\xB0 => 438, \\xB1 => 474, \\xB2 => 363, \\xB3 => 457, \\xB4 => 483, \\xB5 => 484, \\xB6 => 108, \\xB7 => 141, \\xB8 => 465, \\xB9 => 374 , \\xBA => 108, \\xBB => 417, \\xBC => 71, \\xBD => 476, \\xBE => 57, \\xBF => 485, \\xC3 => 488, \\xC4-\\xCA => 488, \\xCC => 488, \\xCD => 488, \\xCE => 488, \\xCF => 488, \\xD0-\\xD1 => 488, \\xD2 => 488, \\xD3 => 488, \\xD4 => 488, \\xD5 => 488, \\xD6 => 488, \\xD8 => 488, \\xD9 => 488, \\xDA => 488, \\xDB => 488, \\xDC => 488, \\xDD => 488) ^000487: sparse(0-9 => 488, A-Z => 488, _ => 488, a-z => 488, \\x80 => 58, \\x81 => 72, \\x82 => 78, \\x83 => 86, \\x84 => 96, \\x85 => 111, \\x86 => 123, \\x87 => 136, \\x88 => 143, \\x89 => 153, \\x8A => 165, \\x8B => 172, \\x8C => 177, \\x8D => 186, \\x8E => 194, \\x8F => 202, \\x90 => 217, \\x91 => 222, \\x92 => 224, \\x93 => 227, \\x94 => 233, \\x95 => 238, \\x96 => 244, \\x97 => 251, \\x98 => 257, \\x99 => 258, \\x9A => 269, \\x9B => 274, \\x9C => 279, \\x9D => 285, \\x9E => 295, \\x9F => 298, \\xA0 => 312, \\xA1 => 315, \\xA2 => 320, \\xA3 => 322, \\xA4 => 328, \\xA5 => 333, \\xA6 => 33 8, \\xA7 => 341, \\xA8 => 345, \\xA9 => 351, \\xAA => 360, \\xAB => 365, \\xAC => 368, \\xAD => 375, \\xAE => 383, \\xAF => 385, \\xB0 => 395, \\xB1 => 402, \\xB2 => 408, \\xB3 => 411, \\xB4 => 418, \\x B5 => 425, \\xB6 => 429, \\xB7 => 435, \\xB8 => 440, \\xB9 => 444, \\xBA => 450, \\xBB => 460, \\xBC => 466, \\xBD => 471, \\xBE => 477, \\xBF => 486)  000488: MATCH(0) <\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u0436\u0430\u0442\u0438\u0435 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0445 \u041d\u041a\u0410 \u0441 \u043c\u0435\u043d\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439. \u041d\u043e \u0438\u0437-\u0437\u0430 \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043e\u043d\u043e \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e UTF-8 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u043f\u0440\u044f\u043c\u044b\u043c \u041d\u041a\u0410. (\u041e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u041d\u041a\u0410 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u0414\u041a\u0410, \u0442.\u043a. \u0434\u043b\u044f \u0414\u041a\u0410 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f.) \u041e\u0434\u043d\u0430\u043a\u043e, \u043c\u044b \u0432\u0441\u0451 \u0435\u0449\u0451 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0435 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u044b \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0438\u0445 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0441\u0436\u0430\u0442\u0438\u0435 \u043d\u0435 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043e.<\/p>\n<p><a class=\"anchor\" name=\"nfa_literal_trie\" id=\"nfa_literal_trie\"><\/a><\/p>\n<h3>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u041d\u041a\u0410: \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438 \u043a \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443, \u043e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 &#8212; \u044d\u0442\u043e \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b. \u042d\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430 \u0432 \u043d\u0451\u043c, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u041d\u041a\u0410 \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0440.\u0432. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432. \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430, \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u0438\u043d\u044b \u0440.\u0432. \u041f\u043e \u044d\u0442\u043e\u0439 \u0436\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0442\u0430\u043a\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432. \u0447\u0430\u0441\u0442\u043e (\u043d\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430) \u0438\u043c\u0435\u044e\u0442 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u044e\u0442 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0442\u0435\u043c \u0438\u043b\u0438 \u0438\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043b\u0435\u043d\u0438\u0432\u043e\u0433\u043e \u0414\u041a\u0410. \u041e\u0434\u043d\u0430\u043a\u043e, \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0438 \u0434\u0430\u0436\u0435 \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u043c\u043e\u0436\u043d\u043e &#171;\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c&#187; \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0440.\u0432.<\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u0439 \u043f\u043e\u0434\u0433\u043b\u0430\u0432\u0435 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u041d\u041a\u0410, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u044c \u0441\u043b\u0443\u0447\u0430\u0435\u043c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432. \u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u041d\u041a\u0410 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430:<\/p>\n<pre><code>$ regex-debug compile 'zap|z|zapper' 0000 Save(0) (start) 0001 Split(2, 5) 0002 'z' 0003 'a' 0004 'p' (goto: 13) 0005 Split(6, 7) 0006 'z' (goto: 13) 0007 'z' 0008 'a' 0009 'p' 0010 'p' 0011 'e' 0012 'r' 0013 Save(1) 0014 Match(0) <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u0442\u0440\u043e\u0438\u043c \u041d\u041a\u0410 \u0434\u043b\u044f \u0440.\u0432. <code>zap|z|zapper<\/code>. \u0422\u0443\u0442 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>Split<\/code>. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u043e <code>Split(2, 5)<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e <code>zap<\/code> \u0438 \u0434\u0440\u0443\u0433\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e <code>Split(6, 7)<\/code>. \u0412\u0442\u043e\u0440\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e <code>z<\/code> \u0438 <code>zapper<\/code>. \u0422\u0430\u043a \u0447\u0442\u043e \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440.\u0432. \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0432 \u0441\u0442\u043e\u0433\u0435.<\/p>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0414\u041a\u0410:<\/p>\n<pre><code>$ regex-cli debug thompson --no-table 'zap|z|zapper' thompson::NFA( >000000: binary-union(2, 1)  000001: \\x00-\\xFF => 0 ^000002: capture(pid=0, group=0, slot=0) => 11  000003: p => 12  000004: a => 3  000005: r => 12  000006: e => 5  000007: p => 6  000008: p => 7  000009: a => 8  000010: union(4, 12, 9)  000011: z => 10  000012: capture(pid=0, group=0, slot=1) => 13  000013: MATCH(0) <\/code><\/pre>\n<p>(\u0421\u043d\u043e\u0432\u0430 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f <code>0<\/code> \u0438 <code>1<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0443 <code>(?s-u:.)*?<\/code>. \u0421\u0442\u0430\u0440\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0442\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c.)<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0438\u0434\u0438\u043c, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u0439\u0442\u0438\u0441\u044c <code>z<\/code> \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <code>11<\/code>. \u0422\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>union(4, 12, 9)<\/code> (\u042d\u0442\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u0430 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c <code>Split<\/code> \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c \u0432 \u0441\u0442\u0430\u0440\u043e\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435 \u041d\u041a\u0410, \u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0432\u0441\u0435 \u0432 \u043e\u0434\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.) \u0415\u0441\u043b\u0438 \u0431\u044b \u044d\u0442\u043e\u0442 \u041d\u041a\u0410 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0431\u044b \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430, \u043d\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0432 \u0441\u0442\u043e\u0433\u0435. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u043e\u0441\u044c <code>z<\/code>, \u0447\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u0436\u0435 \u0441\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c \u0431\u044b. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u044d\u0442\u043e\u0433\u043e, \u0440.\u0432. \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 <code>z(?:ap||apper)<\/code>.<\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442? \u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430. \u041d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u0437\u0434\u0435\u0441\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u043e\u0441\u0438\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0449\u0438\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0440.\u0432. <code>abc|xyz<\/code>. \u0417\u0434\u0435\u0441\u044c \u043d\u0435\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430. \u0427\u0442\u043e \u0432\u044b\u0434\u0430\u0451\u0442 \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u041d\u041a\u0410:<\/p>\n<pre><code>$ regex-debug compile 'abc|xyz' 0000 Save(0) (start) 0001 Split(2, 5) 0002 'a' 0003 'b' 0004 'c' (goto: 8) 0005 'x' 0006 'y' 0007 'z' 0008 Save(1) 0009 Match(0) <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u043d\u043e\u0432\u0430 \u0432\u0438\u0434\u0438\u043c\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e <code>Split<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u0432\u0435\u0442\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e <code>abc<\/code> \u0438 \u0437\u0430\u0442\u0435\u043c \u043d\u0430 <code>xyz<\/code>.<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u041d\u041a\u0410:<\/p>\n<pre><code>$ regex-cli debug thompson --no-table 'abc|xyz' thompson::NFA( >000000: binary-union(2, 1)  000001: \\x00-\\xFF => 0 ^000002: capture(pid=0, group=0, slot=0) => 7  000003: c => 8  000004: b => 3  000005: z => 8  000006: y => 5  000007: sparse(a => 4, x => 6)  000008: capture(pid=0, group=0, slot=1) => 9  000009: MATCH(0) ) <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442 \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432. \u0421\u0438\u043c\u0432\u043e\u043b\u044b <code>a<\/code> \u0438 <code>x<\/code> \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0432 \u043e\u0434\u043d\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438, \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0440\u0430\u0437\u0432\u0435\u0442\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u043d\u0430 \u0441\u0432\u043e\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0441\u0443\u0444\u0444\u0438\u043a\u0441, <code>bc<\/code> \u0438 <code>yz<\/code>.<\/p>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u041d\u041a\u0410 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043b \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432, <a href=\"https:\/\/github.com\/rust-lang\/regex\/blob\/4f47b14d60e82e85a880513833362d5fb485ffa8\/regex-automata\/src\/nfa\/thompson\/literal_trie.rs\" rel=\"noopener noreferrer nofollow\">\u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b \u0435\u0451 \u0432 \u0434\u0435\u0440\u0435\u0432\u043e<\/a>, \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b \u044d\u0442\u043e \u0434\u0435\u0440\u0435\u0432\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u041d\u041a\u0410 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432. \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u043f\u0440\u0438\u0451\u043c\u043e\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 leftmost-first \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0435\u0441\u0442\u044c \u0441\u043e\u0431\u043b\u0430\u0437\u043d \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0432\u0438\u0434\u0435 <code>z(?:ap(?:per)?)?<\/code>. \u041d\u043e \u044d\u0442\u043e \u0440.\u0432. \u0432\u0435\u0440\u043d\u0451\u0442 \u043d\u0435 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435! \u041d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 <code>zapper<\/code> \u043e\u043d\u043e \u0432\u0435\u0440\u043d\u0451\u0442 <code>zapper<\/code>, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043a\u0430\u043a \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0440.\u0432. <code>zap|z|zapper<\/code> \u0432\u0435\u0440\u043d\u0451\u0442 <code>zap<\/code>. \u041b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u044d\u0442\u043e\u0433\u043e, \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b, \u0433\u0434\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 (\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432). \u0415\u0441\u043b\u0438 \u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e, \u0442\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f leftmost-first \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438, \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0441\u044f \u043f\u0440\u0438 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u041d\u041a\u0410.<\/p>\n<p><a class=\"anchor\" name=\"nfa_future_work\" id=\"nfa_future_work\"><\/a><\/p>\n<h3>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u041d\u041a\u0410<\/h3>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u043b\u044f \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b \u044f \u0445\u043e\u0442\u0435\u043b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0440\u0430\u0431\u043e\u0442 \u043d\u0430\u0434 \u041d\u041a\u0410.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 &#8212; \u044d\u0442\u043e <a href=\"https:\/\/en.wikipedia.org\/wiki\/Glushkov%27s_construction_algorithm\" rel=\"noopener noreferrer nofollow\">\u041d\u041a\u0410 \u0413\u043b\u0443\u0448\u043a\u043e\u0432\u0430<\/a>. \u0423 \u043d\u0435\u0433\u043e \u0445\u0443\u0436\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043d\u043e \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0432 \u0432\u0438\u0434\u0435 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432. \u0418\u0437-\u0437\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u041d\u041a\u0410 \u0413\u043b\u0443\u0448\u043a\u043e\u0432\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0431\u043e\u043b\u0435\u0435 \u043c\u0430\u043b\u044b\u0445 \u0440.\u0432. \u0422\u0430\u043a \u0436\u0435 \u041d\u041a\u0410 \u0413\u043b\u0443\u0448\u043a\u043e\u0432\u0430, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0431\u0438\u0442-\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043a\u0440\u0435\u0439\u0442\u0435 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u041e\u0434\u0438\u043d \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0442\u0443\u0442 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u043e \u041d\u041a\u0410 \u0413\u043b\u0443\u0448\u043a\u043e\u0432\u0430 \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u042e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445. (\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u0430\u043a\u0438\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0434\u0438\u0441\u043a\u0432\u0430\u043b\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438.)<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 &#8212; \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u041d\u041a\u0410 \u0432 \u043e\u0434\u043d\u043e\u043c \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u043a\u0435 \u043f\u0430\u043c\u044f\u0442\u0438. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u044b\u043c\u0438 \u043a \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e, \u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c zero-copy \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e. \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0431\u043e\u043b\u0435\u0435 \u0448\u0438\u0440\u043e\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 unsafe-\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u043d\u043e \u0435\u0441\u0442\u044c \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0435 \u0432\u044b\u0433\u043e\u0434\u044b.<\/p>\n<p><a class=\"anchor\" name=\"regex_engines\" id=\"regex_engines\"><\/a><\/p>\n<h2>\u0414\u0432\u0438\u0436\u043a\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/h2>\n<p>\u041f\u043e\u0434\u043e\u0431\u043d\u043e <a href=\"https:\/\/github.com\/google\/re2\" rel=\"noopener noreferrer nofollow\">RE2<\/a>, \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u043d\u0438\u0445 \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u043d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e. \u0412 \u044d\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u043c\u044b \u0433\u043b\u0443\u0431\u0436\u0435 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043c\u0441\u044f \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c, \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442. \u0418 \u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432. \u0432 \u043e\u0434\u043d\u043e\u043c.<\/p>\n<p>\u041d\u043e \u0437\u0430\u0447\u0435\u043c \u0438\u043c\u0435\u0442\u044c \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432.? \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0438\u0438: \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432. \u0441 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u043c\u0435\u044e\u0442 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044e \u0438\u0441\u043a\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u0447\u0435\u043c \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u043c\u0435\u043d\u044c\u0448\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0434\u0432\u0438\u0436\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/nfa\/thompson\/pikevm\/struct.PikeVM.html\" rel=\"noopener noreferrer nofollow\"><code>PikeVM<\/code><\/a>, \u043d\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0440\u0430\u0437\u043e\u0447\u0430\u0440\u043e\u0432\u0430\u043b\u0430 \u0431\u044b. \u042d\u0442\u043e \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432. \u041d\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0435\u043a\u0442\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043a\u0440\u0435\u0439\u0442\u043e\u043c <code>regex<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0432\u0438\u0436\u043e\u043a <code>PikeVM<\/code> \u0431\u0435\u0440\u0451\u0442 \u0432\u0441\u0451 \u043d\u0430 \u0441\u0435\u0431\u044f.<\/p>\n<p>\u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e <code>regex-cli<\/code> \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432., \u0442\u0430\u043a \u0436\u0435 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0430 Rust. \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Cargo \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <code>regex-automata<\/code> \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438:<\/p>\n<pre><code>$ cargo init --bin $ cargo add 'regex-automata@0.3' <\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b <code>src\/main.rs<\/code>, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0442\u0443\u0434\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>cargo run<\/code>.<\/p>\n<p><a class=\"anchor\" name=\"eng_common\" id=\"eng_common\"><\/a><\/p>\n<h3>\u041e\u0431\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/h3>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u043a\u0440\u0435\u0439\u0442\u0435 <code>regex-automata<\/code> \u0441\u043e\u0431\u0440\u0430\u043d\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432., \u0432\u0441\u0435 \u043e\u043d\u0438 \u0438\u043c\u0435\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0435 API. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u043e\u0438\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u044d\u0442\u0438\u0445 \u043e\u0431\u0449\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u0422\u0440\u0438\u0430\u0434\u0430 \u0441\u0430\u043c\u044b\u0445 \u0432\u0430\u0436\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432: <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/struct.Input.html\" rel=\"noopener noreferrer nofollow\"><code>Input<\/code><\/a> (\u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435), <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/struct.Match.html\" rel=\"noopener noreferrer nofollow\"><code>Match<\/code><\/a> (\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435) \u0438 <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/struct.MatchError.html\" rel=\"noopener noreferrer nofollow\"><code>MatchError<\/code><\/a> (\u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0438\u0441\u043a\u0430).<\/p>\n<p><code>Input<\/code> &#8212; \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212; \u0441\u0442\u043e\u0433 (haystack), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u0430\u0439\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e API \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0432\u0441\u0451, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0442\u0440\u0435\u0439\u0442 <code>Into&lt;Input><\/code>, \u0430 \u0442\u0430\u043a \u0436\u0435 <code>&amp;[u8]<\/code> \u0438 <code>&amp;str<\/code> \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>Into&lt;Input><\/code> \u0443\u0436\u0435 \u0435\u0441\u0442\u044c. \u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432 \u0441\u0435\u0431\u044f: \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0441\u0442\u043e\u0433\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0438\u0441\u043a; \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u044f\u043a\u043e\u0440\u0435\u0439 (\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a); \u0436\u0430\u0434\u043d\u043e\u0441\u0442\u044c &#8212; \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435.<\/p>\n<p><code>Match<\/code> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u043c \u0432 \u0441\u0442\u043e\u0433\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 &#8212; \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0431\u0430\u0439\u0442 (\u0432 \u0432\u0438\u0434\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0439) \u0432 \u0441\u0442\u043e\u0433\u0435, \u0433\u0434\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435. \u0418 \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 &#8212; <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/struct.PatternID.html\" rel=\"noopener noreferrer nofollow\"><code>PatternID<\/code><\/a>, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0439\u0434\u0435\u043d. (\u041a\u0430\u0436\u0434\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432. \u0432 <code>regex-automata<\/code> \u0438\u043c\u0435\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432. \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043d\u0443\u043b\u044f, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0430\u0432\u0442\u043e\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0443 \u0434\u0432\u0438\u0436\u043a\u0430.)<\/p>\n<p><code>MatchError<\/code> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u0438\u0441\u043a\u0430. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0430, \u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043d\u0435\u0442, \u0442.\u0435. \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 API \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0432\u0438\u0434\u0435 <code>Result&lt;Option&lt;Match>, MatchError><\/code>. \u041e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u043f\u043e \u0441\u0430\u043c\u044b\u043c \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0414\u041a\u0410 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0430\u0439\u0442. \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 &#8212; <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/nfa\/thompson\/backtrack\/struct.BoundedBacktracker.html\" rel=\"noopener noreferrer nofollow\"><code>BoundedBacktracker<\/code><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443, \u0435\u0441\u043b\u0438 \u0434\u043b\u0438\u043d\u0430 \u0441\u0442\u043e\u0433\u0430 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043b\u0438\u043c\u0438\u0442. \u041e\u0434\u043d\u0430 \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/meta\/struct.Regex.html\" rel=\"noopener noreferrer nofollow\">\u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432.<\/a>, \u043a\u0430\u043a \u043c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u043f\u043e\u0437\u0436\u0435, \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u0441\u0430\u0434\u0430 \u043d\u0430\u0434 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 \u0434\u0432\u0438\u0436\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u043c\u0443 \u043a\u043e\u0434\u0443.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0449\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u0436\u0434\u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e\u043c \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>Builder<\/code>, \u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 &#8212; \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u043e \u0438 \u0431\u043e\u043b\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <code>Config<\/code>. \u041e\u0431\u0441\u0443\u0434\u0438\u043c \u044d\u0442\u043e, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u0441\u044f \u0434\u0430\u043b\u0435\u0435. \u0422\u0430\u043a \u0436\u0435 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/#api-themes\" rel=\"noopener noreferrer nofollow\">API \u0442\u0435\u043c\u044b<\/a> \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 \u043a\u0440\u0435\u0439\u0442 <code>regex-automata<\/code>.<\/p>\n<p><a class=\"anchor\" name=\"eng_pikevm\" id=\"eng_pikevm\"><\/a><\/p>\n<h3>\u0414\u0432\u0438\u0436\u043e\u043a: PikeVM<\/h3>\n<p>\u041a\u0430\u043a \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0448\u0435, <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/nfa\/thompson\/pikevm\/struct.PikeVM.html\" rel=\"noopener noreferrer nofollow\"><code>PikeVM<\/code><\/a> \u0431\u0435\u0440\u0451\u0442 \u0432\u0441\u044e \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0441\u0435\u0431\u044f (\u0430\u043d\u0433\u043b. \u0438\u0434\u0438\u043e\u043c\u0430 the buck stops with smb.). \u0422.\u0435. \u043e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0440\u0435\u0439\u0442\u043e\u043c <code>regex-syntax<\/code>, \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u0445 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u0442\u043e\u0433\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u043b\u0438\u043d\u044b. \u0414\u0440\u0443\u0433\u0438\u0435 \u0436\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432. \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<ul>\n<li>\n<p><code>BoundedBacktracker<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 <code>len(haystack) * len(regex)<\/code> \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c\u0438 \u0441\u0442\u043e\u0433\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043c\u0430\u043b\u044b\u043c \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u041d\u041a\u0410, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044e \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u0414\u041a\u0410 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u043b\u043e\u0432 \u0432 \u042e\u043d\u0438\u043a\u043e\u0434\u0435. \u041e\u0431\u0430 \u0434\u0432\u0438\u0436\u043a\u0430 \u0438\u043c\u0435\u044e\u0442 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u042e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u0445 \u0433\u0440\u0430\u043d\u0438\u0446 \u0441\u043b\u043e\u0432 \u043a\u0430\u043a \u043d\u0435\u044e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u0445, \u0435\u0441\u043b\u0438 \u0441\u0442\u043e\u0433 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 ASCII. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0435-ASCII \u0431\u0430\u0439\u0442\u044b, \u043e\u0431\u0430 \u0434\u0432\u0438\u0436\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/nfa\/thompson\/pikevm\/struct.Cache.html\" rel=\"noopener noreferrer nofollow\">Cache<\/a>, \u0434\u0432\u0438\u0436\u043e\u043a <code>PikeVM<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u041d\u041a\u0410 \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0442\u0440\u0443\u0434\u043e\u0437\u0430\u0442\u0440\u0430\u0442. \u0422.\u0435. \u043f\u043e\u0438\u0441\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e &#171;\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438&#187; \u0441\u0430\u043c\u043e\u0433\u043e \u041d\u041a\u0410. (\u041a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u043d\u043e\u0433\u0434\u0430 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0430 &#171;\u0414\u041a\u0410 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c&#187;). \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u0430\u0436\u0434\u043e\u0435 \u041d\u041a\u0410 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f. <code>PikeVM<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u041d\u041a\u0410 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044f \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043d\u0430\u043b\u0435\u0442\u0443. \u0422.\u043a. \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0442\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u043e\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439. \u0422\u0430\u043a \u0436\u0435 \u0434\u0432\u0438\u0436\u043e\u043a \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430.<\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0434\u0432\u0438\u0436\u043a\u043e\u043c &#8212; \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0438 \u0435\u0451 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439. \u0414\u043b\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0433.\u0437. \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043a\u043e\u043d\u0446\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0432 \u0442\u043e\u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u043c \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c <code>O(m * n)<\/code>. \u0422.\u0435., \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c (backtracking), <code>PikeVM<\/code> \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443 \u0441\u0442\u043e\u0433\u0430, \u043a\u0430\u043a \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044f \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 (lock-step). \u042d\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u0443\u0433\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0440.\u0432. \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432. (\u042d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u043f\u0440\u0438\u0447\u0438\u043d, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u043d\u0435\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u044b\u043b\u043e \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u041d\u041a\u0410 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u044d\u043f\u0441\u0438\u043b\u043e\u043d-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432.)<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a <code>PikeVM<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432. \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a\u043e\u0434 \u0441\u043b\u0435\u0433\u043a\u0430 \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 Rust, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430.<\/p>\n<pre><code class=\"rust\">use regex_automata::{nfa::thompson::pikevm::PikeVM, Match};  fn main() {     \/\/ \u0421\u043e\u0437\u0434\u0430\u0451\u043c PikeVM \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0440.\u0432.     \/\/ \u041d\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c PikeVM \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u041d\u041a\u0410,     \/\/   \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f `PikeVM::builder()`     let re = PikeVM::new(r\"\\b\\w+\\b\").unwrap();      \/\/ \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0443 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u043d\u0443\u0436\u043d\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e     \/\/   \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (mutable scratch space), \u043a\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e     \/\/   \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435. \u0423 \u0434\u0432\u0438\u0436\u043a\u0430 \u041c\u0435\u0442\u0430 \u0435\u0441\u0442\u044c API,     \/\/   \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u044f\u0447\u0435\u0442 \u044d\u0442\u043e\u0442 \u0430\u0441\u043f\u0435\u043a\u0442. \u041d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u0432\u0438\u0436\u043a\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e,     \/\/   \u044d\u0442\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c.     let mut cache = re.create_cache();      let mut it = re.find_iter(&amp;mut cache, \"\u03a3\u03ad\u03c1\u03bb\u03bf\u03ba \u03a7\u03bf\u03bb\u03bc\u03c2\");      assert_eq!(Some(Match::must(0, 0..12)), it.next());     assert_eq!(Some(Match::must(0, 13..23)), it.next());     assert_eq!(None, it.next()); } <\/code><\/pre>\n<p>\u0418 \u0432\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>regex-cli<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435:<\/p>\n<pre><code>$ regex-cli find match pikevm --no-table -p '\\b\\w+\\b' -y '\u03a3\u03ad\u03c1\u03bb\u03bf\u03ba \u03a7\u03bf\u03bb\u03bc\u03c2' 0:0:12:\u03a3\u03ad\u03c1\u03bb\u03bf\u03ba 0:13:23:\u03a7\u03bf\u03bb\u03bc\u03c2 <\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u042e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u0445 \u0433\u0440\u0430\u043d\u0438\u0446 \u0441\u043b\u043e\u0432 \u0432 \u043d\u0435-ASCII \u0441\u0442\u043e\u0433\u0435. \u0422\u043e\u043b\u044c\u043a\u043e <code>PikeVM<\/code>, <code>BoundedBacktracker<\/code> \u0438 \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410 \u044d\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442. \u041b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0414\u041a\u0410 \u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0431\u044b \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>\u0414\u0440\u0443\u0433\u0430\u044f \u0432\u0430\u0436\u043d\u0430\u044f \u0432\u0435\u0449\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0442\u0443\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0435 API \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043e\u0448\u0438\u0431\u043a\u0443. \u041d\u0430\u043f\u0440\u043e\u0442\u0438\u0432, <code>PikeVM<\/code> \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0438 \u043f\u0440\u0438 \u043a\u0430\u043a\u0438\u0445 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u0445 (\u0438 \u0434\u0430\u0436\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0430\u043d\u0438\u043a\u0438). \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u044d\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0440\u0435\u0434\u0438 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0438\u0437 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex-automata<\/code>. \u041b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u043e \u0442\u043e\u0439 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u0438\u0441\u043a\u0430.<\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043c\u0443\u043b\u044c\u0442\u0438\u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0441 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0433.\u0437. (\u042d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code> \u043d\u0435 \u0443\u043c\u0435\u0435\u0442, \u0438 \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437 \u0441\u043e \u0432\u0440\u0435\u043c\u0451\u043d API <code>RegexSet<\/code>. \u0414\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u044d\u0442\u043e \u0442\u0430\u043a, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 <code>regex-automata<\/code>. \u0422\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a \u0436\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043a\u043e\u043c \u0440.\u0432.)<\/p>\n<pre><code class=\"rust\">use regex_automata::nfa::thompson::pikevm::PikeVM;  fn main() {     let re = PikeVM::new_many(&amp;[         r\"(?&lt;email>[.\\w]+@(?&lt;domain>[.\\w]+))\",         r\"?(&lt;phone>(?&lt;areacode>[0-9]{3})-[0-9]{3}-[0-9]{4})\",     ])     .unwrap();      let mut cache = re.create_cache();      let hay = \"foo@example.com, 11-867-5309\";     let mut it = re.captures_iter(&amp;mut cache, hay);      let caps = it.next().unwrap();     assert_eq!(0, caps.pattern().unwrap().as_usize());     assert_eq!(\"example.com\", &amp;hay[caps.get_group_by_name(\"domain\").unwrap()]);      let caps = it.next().unwrap();     assert_eq!(1, caps.pattern().unwrap().as_usize());     assert_eq!(\"111\", &amp;hay[caps.get_group_by_name(\"areacode\").unwrap()]);      assert!(it.next().is_none()); }  <\/code><\/pre>\n<p>\u0418 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>regex-cli<\/code>:<\/p>\n<pre><code>$ regex-cli find capture pikevm --no-table \\    -p '(?&lt;email>[.\\w]+@(?&lt;domain>[.\\w]+))' \\    -p '(?&lt;phone>(?&lt;areacode>[0-9]{3})-[0-9]{3}-[0-9]{4})' \\    -y 'foo@example.com, 111-867-5309' 0:{ 0: 0..15\/foo@example.com, 1\/email: 0..15\/foo@example.com, 2\/domain: 4..15\/example.com } 1:{ 0: 17..29\/111-867-5309, 1\/phone: 17..29\/111-867-5309, 2\/areacode: 17..20\/111 } <\/code><\/pre>\n<p>\u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u043a\u0430\u043a \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430. \u041d\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u043c \u043a\u043e\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u0433.\u0437. \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0431\u044b\u043b \u043d\u0430\u0439\u0434\u0435\u043d.<\/p>\n<p><a class=\"anchor\" name=\"eng_bb\" id=\"eng_bb\"><\/a><\/p>\n<h3>\u0414\u0432\u0438\u0436\u043e\u043a: BoundedBacktracker<\/h3>\n<p>\u0414\u0432\u0438\u0436\u043e\u043a <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/nfa\/thompson\/backtrack\/struct.BoundedBacktracker.html\" rel=\"noopener noreferrer nofollow\"><code>BoundedBacktracker<\/code><\/a> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c (backtracking algorithm) \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430. \u0415\u0433\u043e \u043f\u043e\u0440\u043e\u0439 \u0442\u0430\u043a \u0436\u0435 (\u043a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e) \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 &#171;\u041d\u041a\u0410 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c&#187;. \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0432 \u043a\u0440\u0435\u0439\u0442\u0435 <code>regex-automata<\/code> \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0431\u044d\u043a\u0442\u0440\u0435\u043a\u0438\u043d\u0433\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u0448\u0430\u0433\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>O(m * n)<\/code>, \u043d\u043e \u0437\u0430 \u0441\u0447\u0451\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0431\u044a\u0451\u043c\u043e\u043c <code>O(m * n)<\/code>.<\/p>\n<p>(\u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u044d\u043a\u0442\u0440\u0435\u043a\u0438\u043d\u0433\u0430 \u0442\u0430\u043a \u0436\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c (bounded), \u043d\u043e \u044f\u0432\u043d\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 <code>Bounded<\/code> \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 <code>BoundedBacktracker<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u044f\u0432\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>O(m * n)<\/code> \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435.)<\/p>\n<p>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0434\u0432\u0438\u0436\u043a\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c <code>PikeVM<\/code>. \u0412 \u0433\u0440\u0443\u0431\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u0445 &#8212; \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0447\u0442\u0438 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430.<\/p>\n<p>\u0412\u043e\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 <code>PikeVM<\/code>, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u0434\u0432\u0438\u0436\u043e\u043a <code>BoundedBacktracker<\/code>:<\/p>\n<pre><code class=\"rust\"> use regex_automata::{nfa::thompson::backtrack::BoundedBacktracker, Match};  fn main() {     let re = BoundedBacktracker::new(r\"\\b\\w+\\b\").unwrap();      \/\/ \u0414\u0432\u0438\u0436\u043a\u0443 \u0442\u0430\u043a \u0436\u0435 \u043d\u0443\u0436\u0435\u043d \u043a\u0435\u0448, \u043a\u0430\u043a \u0438 PikeVM. \u0412 \u043a\u0435\u0448\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f     \/\/   \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u0448\u0430\u0433\u0438 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b, \u0430 \u0442\u0430\u043a \u0436\u0435     \/\/   \u0432 \u043d\u0451\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0441\u0442\u0435\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0434\u0432\u0438\u0436\u043a\u0430     \/\/   \u0412\u0441\u0451 \u044d\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043a\u0443\u0447\u0435.     let mut cache = re.create_cache();      \/\/ \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 PikeVM, bounded backtracker \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443     \/\/   \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435. \u042d\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 `len(regex) * len(haystack)`     \/\/   \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 `Config::visited_capacity`     let mut it = re.try_find_iter(&amp;mut cache, \"\u03a3\u03ad\u03c1\u03bb\u03bf\u03ba \u03a7\u03bf\u03bb\u03bc\u03c2\");     assert_eq!(Some(Ok(Match::must(0, 0..12))), it.next());     assert_eq!(Some(Ok(Match::must(0, 13..23))), it.next());     assert_eq!(None, it.next()); } <\/code><\/pre>\n<p>\u0418 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>regex-cli<\/code>:<\/p>\n<pre><code>$ regex-cli find match backtrack --no-table -p '\\b\\w+\\b' -y '\u03a3\u03ad\u03c1\u03bb\u03bf\u03ba \u03a7\u03bf\u03bb\u03bc\u03c2' 0:0:12:\u03a3\u03ad\u03c1\u03bb\u03bf\u03ba 0:13:23:\u03a7\u03bf\u03bb\u03bc\u03c2 <\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0441 <code>PikeVM<\/code>. \u041e\u0434\u043d\u043e \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0430 <code>re.find_iter(...)<\/code> \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u0437\u043e\u0432 <code>re.try_find_iter(...)<\/code>. \u0422.\u0435., \u043a\u0430\u043a \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435, \u0434\u0432\u0438\u0436\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443, \u0435\u0441\u043b\u0438 \u043f\u043e\u0438\u0441\u043a \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0435\u043c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043b\u0438\u043c\u0438\u0442. \u0420\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043b\u0438\u043c\u0438\u0442\u0430 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex\/regex_automata\/nfa\/thompson\/backtrack\/struct.Config.html#method.visited_capacity\" rel=\"noopener noreferrer nofollow\"><code>Config::visited_capacity<\/code><\/a>. \u041c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u0443\u0437\u043d\u0430\u0442\u044c \u043f\u043e \u0440.\u0432. \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u043e\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u0435\u0437 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438:<\/p>\n<pre><code class=\"rust\">use regex_automata::nfa::thompson::backtrack::BoundedBacktracker;  fn main() {     let re = BoundedBacktracker::new(r\"\\b\\w+\\b\").unwrap();     println!(\"{:?}\", re.max_haystack_len()); } <\/code><\/pre>\n<p>\u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u043d\u0430 \u043c\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u043e \u0447\u0438\u0441\u043b\u043e <code>6635<\/code>. \u042d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0430\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c, \u0438 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u0440.\u0432. \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e, \u0442.\u043a. <code>\\w<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u042e\u043d\u0438\u043a\u043e\u0434-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442 \u043e\u043a\u043e\u043b\u043e 100 000 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 codepoints. \u041c\u043e\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u043e\u0433\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 <code>Config::visited_capacity<\/code>, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u0435\u0433\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u0440.\u0432., \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u042e\u043d\u0438\u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"rust\">use regex_automata::nfa::thompson::backtrack::BoundedBacktracker;  fn main() {     let re = BoundedBacktracker::new(r\"(?-u)\\b\\w+\\b\").unwrap();     println!(\"{:?}\", re.max_haystack_len()); } <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u043c\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0447\u0438\u0441\u043b\u043e <code>233015<\/code>. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043f\u043e\u0447\u0442\u0438 \u0432 \u0434\u0432\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u0430!<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u043c\u0443 \u0434\u0432\u0438\u0436\u043a\u0443, \u0430 \u043d\u0435 <code>PikeVM<\/code>. \u041e\u0431\u0430 \u044d\u0442\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u0430 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0438\u0441\u043a\u0430, \u043d\u043e <code>BoundedBacktracker<\/code> \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<p><a class=\"anchor\" name=\"eng_onepassfsa\" id=\"eng_onepassfsa\"><\/a><\/p>\n<h3>\u0414\u0432\u0438\u0436\u043e\u043a: \u041e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410<\/h3>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/dfa\/onepass\/struct.DFA.html\" rel=\"noopener noreferrer nofollow\">\u041e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410<\/a>, \u043f\u043e\u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u0435\u043c \u043e \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e. \u041e\u0434\u043d\u0438\u043c \u0432\u0430\u0436\u043d\u044b\u043c \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u043c \u043a\u0430\u043a <code>PikeVM<\/code>, \u0442\u0430\u043a \u0438 <code>BoundedBacktracker<\/code>, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f <code>PikeVM<\/code> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>regex-cli<\/code>:<\/p>\n<pre><code>$ regex-cli find capture pikevm --no-table \\    -p '(?&lt;year>[0-9]{4})-(?&lt;month>[0-9]{2})-(?&lt;day>[0-9]{2})' \\    -y '2023-07-02' 0:{ 0: 0..10\/2023-07-02, 1\/year: 0..4\/2023, 2\/month: 5..7\/07, 3\/day: 8..10\/02 } <\/code><\/pre>\n<p>\u0413.\u0437. \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0441 \u0440.\u0432. \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0441\u0430\u043c\u0438 \u043f\u043e \u0441\u0435\u0431\u0435. \u041a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435, \u043c\u044b \u043d\u0435 <em>\u043f\u0440\u043e\u0441\u0442\u043e<\/em> \u0438\u0449\u0435\u043c \u0434\u0430\u0442\u0443, \u043c\u044b \u0438\u0449\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u0430\u0442\u044b \u0438 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a \u043d\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0447\u0435\u0440\u0435\u0437 API. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0430\u043c \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code>:<\/p>\n<pre><code class=\"rust\">use regex::Regex;  fn main() {     let pat = r\"(?&lt;year>[0-9]{4})-(?&lt;month>[0-9]{2})-(?&lt;day>[0-9]{2})\";     let re = Regex::new(pat).unwrap();     let Some(caps) = re.captures(\"2023-07-02\") else { return };     println!(\" year: {:?}\", &amp;caps[\"year\"]);     println!(\"month: {:?}\", &amp;caps[\"month\"]);     println!(\"  day: {:?}\", &amp;caps[\"day\"]); } <\/code><\/pre>\n<p>\u0411\u0435\u0437 \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0440.\u0432. \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u043c\u0438.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0433.\u0437. \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u0430 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0440.\u0432. \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u0432. (\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u0447\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043a\u0430\u043a <a href=\"https:\/\/arxiv.org\/abs\/1907.08837\" rel=\"noopener noreferrer nofollow\">\u0442\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442<\/a>.) \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u044d\u0442\u043e\u0433\u043e \u0433.\u0437. \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0435\u043d\u044b \u043f\u043e\u0432\u0435\u0440\u0445 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u041d\u041a\u0410, \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0451\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u043d\u043e\u0433\u043e <code>PikeVM<\/code>. \u041e\u043d\u0438 \u0442\u0430\u043a \u0436\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e &#171;\u041d\u041a\u0410 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430&#187; \u0438\u043b\u0438 \u0431\u044d\u043a\u0442\u0440\u0435\u043a\u0438\u043d\u0433\u0430, \u0442.\u043a. \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043a\u0430\u0436\u0434\u043e\u0439 \u0433.\u0437. \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c.<\/p>\n<p>\u041d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0433.\u0437. \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u044e\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0414\u041a\u0410 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0438\u0445, \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u043d\u0435\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0445 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0434\u043e \u0447\u0435\u0433\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0442\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0433.\u0437. \u0432 \u0447\u0442\u043e-\u0442\u043e, \u0447\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0414\u041a\u0410: \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410. \u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410 \u043a\u0430\u043a \u041d\u041a\u0410, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0414\u041a\u0410, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435, \u0447\u0435\u043c \u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u041d\u041a\u0410. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u041d\u041a\u0410, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0441\u0442\u043e\u0433\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442.<\/p>\n<p>\u0418\u0434\u0435\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u043a\u043e\u043f\u0438\u044e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u0433.\u0437. (\u0412 <code>PikeVM<\/code> \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u043e <code>len(regex)<\/code> \u043a\u043e\u043f\u0438\u0439 \u0433.\u0437., \u0442.\u043a. \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0438\u0437 \u0433.\u0437. \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0432 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435.) \u0415\u0441\u043b\u0438 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u0442\u043e \u043d\u043e\u0432\u044b\u0439 \u0414\u041a\u0410 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 \u041d\u041a\u0410 \u0437\u0430 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0438 \u044d\u0442\u043e\u0442 \u0414\u041a\u0410 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0441\u0442\u043e\u0433\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0437\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0426\u041f\u0423.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044d\u0442\u043e\u0433\u043e &#8212; <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/dfa\/onepass\/struct.DFA.html\" rel=\"noopener noreferrer nofollow\">\u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043a\u0430\u043a <code>PikeVM<\/code>, \u0442\u0430\u043a \u0438 <code>BoundedBacktracker<\/code> \u0434\u0432\u0438\u0436\u043a\u043e\u0432. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446 \u0433.\u0437. \u0432 \u043a\u0440\u0435\u0439\u0442\u0435 <code>regex<\/code>.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u043c \u0414\u041a\u0410 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0430\u043a \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0414\u041a\u0410, \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438. (\u042d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438, \u0435\u0441\u043b\u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0414\u041a\u0410 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u043f\u0430\u043c\u044f\u0442\u0438; \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d, \u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439.) \u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e \u0432\u0441\u0435\u043c\u0443, \u043c\u043d\u043e\u0433\u0438\u0435 \u0440.\u0432. \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0438\u0441\u043a \u0431\u0435\u0437 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a \u043d\u0430\u0447\u0430\u043b\u0443 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u043a\u0440\u0435\u0439\u0442\u0435 <code>regex<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0435\u044f\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 <code>(?s-u:.)*?<\/code> \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0440.\u0432. \u042d\u0442\u043e\u0442 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u043c, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430 \u043d\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0435 \u0440.\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0438\u0441\u043a \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430\u043c\u0438.<\/p>\n<p>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 &#171;\u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430\u043c\u0438&#187; \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043d\u0435\u0447\u0442\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410 \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e \u0433\u043e\u0434\u043d\u044b\u043c \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e. \u041d\u043e, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u043d\u043e \u043f\u043e\u0437\u0434\u043d\u0435\u0435, \u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432. \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0434\u0430\u0436\u0435, \u0435\u0441\u043b\u0438 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0440.\u0432. \u0438\u0445 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0433.\u0437. \u0432 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438. \u041c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u0432\u0441\u0435\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0432\u0438\u0436\u043a\u0430 \u0414\u041a\u0410, \u0438 \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e, \u0442\u043e \u044f\u043a\u043e\u0440\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a (\u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u043e\u0432\u043f\u0430\u0432\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u043e\u0433\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0433.\u0437. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u043e\u043b\u044c\u0437\u0430 \u043e\u0442 \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0414\u041a\u0410 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u0430.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u043e\u0441\u044c \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445, \u043d\u043e \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u044f\u043c\u0438, \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e API \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0414\u041a\u0410:<\/p>\n<pre><code class=\"rust\">use regex_automata::{dfa::onepass::DFA, Match};  fn main() {     let re = DFA::new(r\"\\b\\w+\\b\").unwrap();     let mut cache = re.create_cache();      \/\/ \u041e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410 \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0435 API \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e,     \/\/    \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0438\u0441\u043a \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u043a\u0438.     \/\/    \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u044e\u0431\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u0431\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f.     \/\/    \u0422\u0430\u043a\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u044e\u0437-\u043a\u0435\u0439\u0441\u043e\u043c, \u043d\u043e \u044d\u0442\u0430 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442     \/\/    \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u0445 \u0432 regex-automata     let Some(m) = re.find(&amp;mut cache, \"\u03a3\u03ad\u03c1\u03bb\u03bf\u03ba \u03a7\u03bf\u03bb\u03bc\u03c2\") else { return };     assert_eq!(Match::must(0, 0..12), m); } <\/code><\/pre>\n<p>\u0418 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>regex-cli<\/code>:<\/p>\n<pre><code>$ regex-cli find match onepass --no-table --anchored \\    -p '\\b\\w+\\b' \\    -y '\u03a3\u03ad\u03c1\u03bb\u03bf\u03ba \u03a7\u03bf\u03bb\u03bc\u03c2' 0:0:12:\u03a3\u03ad\u03c1\u03bb\u03bf\u03ba <\/code><\/pre>\n<p>\u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u0444\u043b\u0430\u0433 <code>--anchored<\/code>, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410 \u0432\u0435\u0440\u043d\u0443\u043b \u0431\u044b \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a. \u0414\u0430\u0436\u0435 \u0441\u0447\u0438\u0442\u0430\u044f, \u0447\u0442\u043e \u0440.\u0432. \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a, \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u043e\u0433\u0430, \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e <code>0<\/code>:<\/p>\n<pre><code class=\"rust\">use regex_automata::{dfa::onepass::DFA, Input, Match};  fn main() {     let hay = \"\u03a3\u03ad\u03c1\u03bb\u03bf\u03ba \u03a7\u03bf\u03bb\u03bc\u03c2\";     let re = DFA::new(r\"\\b\\w+\\b\").unwrap();     let mut cache = re.create_cache();      let Some(m) = re.find(&amp;mut cache, hay) else { return };     assert_eq!(Match::must(0, 0..12), m);      let input = Input::new(hay).range(13..);     let Some(m) = re.find(&amp;mut cache, input) else { return };     assert_eq!(Match::must(0, 13..23), m); } <\/code><\/pre>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044e <code>Input<\/code> \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441 \u043b\u044e\u0431\u044b\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u0434\u0432\u0438\u0436\u043a\u043e\u043c \u0440.\u0432.<\/p>\n<p>\u041f\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u0443\u0434\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0440.\u0432. \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u043c \u0438\u043b\u0438 \u043d\u0435\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440.\u0432. \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u043c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u042e\u043d\u0438\u043a\u043e\u0434\u0430, \u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u043e\u0432\u044b\u043c, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0430. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>$ regex-cli find match onepass --no-table --anchored \\    -p '\\w+\\s+\\w+' \\    -y '\u03a3\u03ad\u03c1\u03bb\u03bf\u03ba \u03a7\u03bf\u03bb\u03bc\u03c2' failed to compile onepass DFA: one-pass DFA could not be built because pattern is not one-pass: conflicting transition <\/code><\/pre>\n<p>\u041d\u043e \u0435\u0441\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u042e\u043d\u0438\u043a\u043e\u0434\u0430, \u0442\u043e\u0433\u0434\u0430 \u0440.\u0432. \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u043c:<\/p>\n<pre><code>$ regex-cli find match onepass --no-table --anchored \\    -p '(?-u)\\w+\\s+\\w+' \\    -y 'Sherlock Holmes' 0:0:15:Sherlock\\x20Holmes <\/code><\/pre>\n<p>\u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043f\u043e \u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d \u042e\u043d\u0438\u043a\u043e\u0434, \u0442\u043e <code>\\w<\/code> \u0438 <code>\\s<\/code> \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f. \u041e\u043d\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0435 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f <em>\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438<\/em>, \u0442.\u043a. \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 codepoint-\u043e\u0432 \u0438\u0437 <code>\\w<\/code> \u0438 <code>\\s<\/code> \u0434\u0430\u0451\u0442 \u043f\u0443\u0441\u0442\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e:<\/p>\n<pre><code>$ regex-cli debug hir --no-table '[\\w&amp;&amp;\\s]' Class(     {}, ) <\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0431\u0430\u0439\u0442. \u0410 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0432 \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u043c \u0414\u041a\u0410 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0447\u0435\u0440\u0435\u0437 \u0431\u0430\u0439\u0442\u044b. \u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0414\u041a\u0410 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>\\w+\\s+\\w+<\/code> \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u042e\u043d\u0438\u043a\u043e\u0434\u0430 \u043d\u0435 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432 \u0414\u041a\u0410 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u043e\u0441\u044c \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043d\u0430 \u043e\u0434\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u041d\u041a\u0410. \u0422.\u0435. \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 codepoint-\u044b \u0432 <code>\\w<\/code> \u0438 <code>\\s<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 \u043e\u0434\u043d\u0438\u0445 \u0438 \u0442\u0435\u0445 \u0436\u0435 UTF-8 code unit-\u043e\u0432.<\/p>\n<p>\u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0436\u0438\u043c \u042e\u043d\u0438\u043a\u043e\u0434\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d, \u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 codepoint-\u043e\u0432 \u043d\u0435 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0431\u0430\u0439\u0442. \u041f\u043e\u0447\u0435\u043c\u0443? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e codepoint-\u044b \u0432 <code>\\w<\/code> \u0438 <code>\\s<\/code> \u043f\u0440\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u042e\u043d\u0438\u043a\u043e\u0434\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b codepoint-\u0430\u043c\u0438 ASCII, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u043e\u0433\u043e UTF-8 code unit-\u0430.<\/p>\n<p>\u0418\u0437-\u0437\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u0414\u041a\u0410 \u043f\u0435\u0440\u0435\u0434 <code>PikeVM<\/code> \u0438 <code>BoundedBacktracker<\/code>, \u0445\u043e\u0442\u044f \u043e\u043d \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043b\u044c\u0448\u0435 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u0436\u0435, \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0440.\u0432., \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0431\u044b\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u043a \u043e\u0448\u0438\u0431\u043a\u0435 \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u0432\u0438\u0436\u043e\u043a.<\/p>\n<p><a class=\"anchor\" name=\"eng_dfa\" id=\"eng_dfa\"><\/a><\/p>\n<h3>\u0414\u0432\u0438\u0436\u043e\u043a: \u0414\u041a\u0410<\/h3>\n<p><a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/dfa\/regex\/struct.Regex.html\" rel=\"noopener noreferrer nofollow\">\u0414\u0432\u0438\u0436\u043e\u043a \u0414\u041a\u0410<\/a> \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0438\u0437 \u0434\u0432\u0443\u0445 <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/dfa\/dense\/struct.DFA.html\" rel=\"noopener noreferrer nofollow\">\u0443\u043f\u043b\u043e\u0442\u043d\u0451\u043d\u043d\u044b\u0445 \u0414\u041a\u0410<\/a>: \u043e\u0434\u0438\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u043e\u0438\u0441\u043a \u0432\u043f\u0435\u0440\u0451\u0434, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043a\u043e\u043d\u0435\u0446 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0414\u041a\u0410 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u043e\u0438\u0441\u043a \u043d\u0430\u0437\u0430\u0434, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f. (\u042d\u0442\u043e\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u0414\u041a\u0410 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0439 \u0432 <a href=\"https:\/\/docs.rs\/regex-syntax\/0.7.*\/regex_syntax\/hir\/struct.Hir.html\" rel=\"noopener noreferrer nofollow\"><code>Hir<\/code><\/a>, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u043d\u0438\u0445 \u041d\u041a\u0410, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0432\u0451\u0440\u043d\u0443\u0442\u043e\u0433\u043e \u041d\u041a\u0410 \u0432 \u0414\u041a\u0410.) \u041c\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u0438 \u0414\u041a\u0410 &#171;\u0443\u043f\u043b\u043e\u0442\u043d\u0451\u043d\u043d\u044b\u043c\u0438&#187;, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044c \u0438\u0445 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/dfa\/sparse\/struct.DFA.html\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0445 \u0414\u041a\u0410<\/a>. \u0423\u043f\u043b\u043e\u0442\u043d\u0451\u043d\u043d\u044b\u0435 \u0414\u041a\u0410 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0434\u043b\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0437\u0430 \u0441\u0447\u0451\u0442 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0445\u043e\u0434\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043a\u0430\u043a \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0435 \u0414\u041a\u0410 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0443\u0449\u0435\u0440\u0431 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430.<\/p>\n<p>\u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0414\u041a\u0410 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u043d\u0430\u0439\u0442\u0438 \u0432 \u0434\u0432\u0438\u0436\u043a\u0430\u0445 \u0440.\u0432. \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442.\u043a. \u043d\u0430 \u0438\u0445 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0445\u043e\u0434\u0438\u0442 <code>O(2^m)<\/code> \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0433\u0434\u0435 <code>m<\/code> \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e <code>len(regex)<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>[01]*1[01]{N}<\/code> \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u041d\u041a\u0410 \u0441 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e <code>N<\/code> \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438, \u0438 \u0442.\u043a. <code>N<\/code> \u0440\u0430\u0441\u0442\u0451\u0442 \u043b\u0438\u043d\u0435\u0439\u043d\u043e, \u0442\u043e \u0438 \u041d\u041a\u0410 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0438 \u043b\u0438\u043d\u0435\u0439\u043d\u043e. \u041d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0414\u041a\u0410 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0436\u0435 <code>2^N<\/code> \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u0438 \u043f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435 \u0414\u041a\u0410 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0438 \u043f\u043e \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0442\u0435.<\/p>\n<p>\u041d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0414\u041a\u0410 \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u0414\u041a\u0410, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0443\u043f\u043b\u043e\u0442\u043d\u0451\u043d\u043d\u044b\u0435 \u0414\u041a\u0410, \u0438\u043c\u0435\u044e\u0442 \u0441\u043a\u043b\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0451\u043c\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0437\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u042d\u0442\u043e \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0437\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u0410 \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u044d\u0442\u043e \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u0434\u043b\u044f \u042e\u043d\u0438\u043a\u043e\u0434\u0430, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u0442\u0430\u0441\u0442\u0440\u043e\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c (disastrous). \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0434\u043b\u044f \u0440.\u0432. <code>\\w<\/code>. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u041d\u041a\u0410 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a\u0430\u043a \u0432\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432. \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 <code>PikeVM<\/code> \u0438 <code>BoundedBacktracker<\/code>).<\/p>\n<pre><code>$ regex-cli debug thompson '\\w' -q [.. snip ..]             memory:  17668 [.. snip ..] <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u041d\u041a\u0410 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 17\u041a\u0411 \u043f\u0430\u043c\u044f\u0442\u0438. \u042d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u043c\u0430\u043b\u043e, \u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0447\u0442\u043e \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043c\u044b \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u041d\u041a\u0410 \u0432 \u0414\u041a\u0410:<\/p>\n<pre><code>$ regex-cli debug dense dfa '\\w' --start-kind unanchored -q [.. snip ..]           memory:  159296 [.. snip ..] <\/code><\/pre>\n<p>\u041f\u0430\u043c\u044f\u0442\u044c \u0440\u0430\u0441\u043f\u0443\u0445\u043b\u0430 \u0434\u043e \u043f\u043e\u0447\u0442\u0438 160\u041a\u0411! (\u042f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b \u0414\u041a\u0410 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043d\u0435\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0414\u041a\u0410. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>--start-kind both<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e, \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0443\u0434\u0432\u043e\u0438\u0442\u0441\u044f). \u0418 \u0434\u0430\u0436\u0435 \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0414\u041a\u0410 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442.<\/p>\n<pre><code>$ regex-cli debug dense dfa '\\w' --start-kind unanchored --minimize -q [.. snip ..]           memory:  159296 [.. snip ..] <\/code><\/pre>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0442.\u043a. \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0414\u0430\u0446\u0443\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u041d\u041a\u0410 \u0434\u043b\u044f UTF-8, \u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u041d\u041a\u0410 \u0432 \u0414\u041a\u0410 \u0438 \u0442\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0414\u041a\u0410 (\u0438 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u0440\u0430\u0439\u043d\u0435 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e). \u0420\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435\u043c \u0443\u043f\u043b\u043e\u0442\u043d\u0451\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0430\u0448 \u0430\u043b\u0444\u0430\u0432\u0438\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d \u0447\u0435\u0440\u0435\u0437 \u0431\u0430\u0439\u0442\u044b. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/p>\n<pre><code>$ regex-cli debug sparse dfa '\\w' --start-kind unanchored -q [.. snip ..]           memory:  102257 [.. snip ..] <\/code><\/pre>\n<p>\u041d\u043e \u0432\u0441\u0451 \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 100\u041a\u0411. \u0421\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u042e\u043d\u0438\u043a\u043e\u0434\u0430 \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0414\u041a\u0410 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043b\u043e\u0445\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u044e\u0442\u0441\u044f. \u0418 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442.\u043a. \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0440\u0435\u0434\u043a\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u0442\u0435\u043a\u0441\u0442\u0430\u0445 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0443 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e ASCII \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f <code>\\w<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0440\u043e\u0447\u0435.<\/p>\n<pre><code>$ regex-cli debug thompson '(?-u)\\w' -q [.. snip ..]             memory:  732 [.. snip ..]  $ regex-cli debug dense dfa '(?-u)\\w' --start-kind unanchored -q [.. snip ..]           memory:  384 [.. snip ..] <\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u043f\u043b\u043e\u0442\u043d\u0451\u043d\u043d\u044b\u0439 \u0414\u041a\u0410 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u041d\u041a\u0410.<\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0432\u0441\u0435\u0433\u043e \u0432\u044b\u0448\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e, \u0437\u0430\u0447\u0435\u043c \u0434\u0432\u0438\u0436\u043a\u0443 \u0440.\u0432. \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u0430\u043a\u043e\u043c\u0443 \u043a\u0430\u043a \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code>, \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u0435\u043d \u0434\u0432\u0438\u0436\u043e\u043a \u0414\u041a\u0410 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430\u043c\u0438? \u0420\u0430\u0437\u0432\u0435 \u043d\u0435\u043f\u043e\u043c\u0435\u0440\u043d\u044b\u0435 \u0430\u043f\u043f\u0435\u0442\u0438\u0442\u044b \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0442 \u0435\u0433\u043e \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u043c? \u0422\u0443\u0442 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043d\u044e\u0430\u043d\u0441\u0430.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0432\u0438\u0436\u043e\u043a \u0414\u041a\u0410 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0415\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>perf-dfa-full<\/code> \u043e\u043f\u0446\u0438\u044e. \u042f \u0440\u0435\u0448\u0438\u043b \u0442\u0430\u043a, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0414\u041a\u0410 \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0432 \u043a\u0440\u0435\u0439\u0442\u0435 <code>regex<\/code>, \u0430 \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 (\u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u043c\u044b\u0439 \u0434\u0430\u043b\u0435\u0435) \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0443\u0447\u0448\u0438\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u0436\u0435, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0414\u041a\u0410 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u043e\u0436\u043d\u044b \u0434\u043b\u044f \u043b\u0435\u043d\u0438\u0432\u043e\u0433\u043e \u0414\u041a\u0410, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0440.\u0432. <code>(?m)^.*$<\/code> \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0414\u041a\u0410 \u0437\u0430\u043c\u0435\u0442\u0438\u0442, \u0447\u0442\u043e <code>.<\/code> \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 <code>\\n<\/code>. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432, \u0433\u0434\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0435\u0434\u0443\u0442 \u0432 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0418 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0434\u0440\u0443\u0433\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0414\u041a\u0410 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0442\u0430\u043a\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 &#171;\u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442&#187; \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>memchr<\/code> \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u0430\u0439\u0442 \u0432 \u0441\u0442\u043e\u0433\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u0432 \u0434\u0440\u0443\u0433\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>regex-cli<\/code> \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u043c. \u0421\u043f\u0435\u0440\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0414\u041a\u0410 (DFA state acceleration) (\u043e\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e).<\/p>\n<pre><code>$ regex-cli find match dense -bB -q --repeat 1000000 \\    -p '(?m-u)^.*$' \\    -y 'this is a long line about the quick brown fox that jumped over the lazy dog' [.. snip ..]                  search time:  56.600473ms [.. snip ..] <\/code><\/pre>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u044d\u0442\u0443 \u0444\u0438\u0447\u0443:<\/p>\n<pre><code>$ regex-cli find match dense -bB -q --repeat 1000000 --no-accelerate \\    -p '(?m-u)^.*$' \\    -y 'this is a long line about the quick brown fox that jumped over the lazy dog' [.. snip ..]                  search time:  199.044059ms [.. snip ..] <\/code><\/pre>\n<p>\u0412\u0440\u0435\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u0422\u0430\u043a \u0436\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u042e\u043d\u0438\u043a\u043e\u0434\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430. \u041a\u043e\u0433\u0434\u0430 \u0436\u0435 \u042e\u043d\u0438\u043a\u043e\u0434 \u0432\u043a\u043b\u044e\u0447\u0435\u043d, <code>.<\/code> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043b\u044e\u0431\u044b\u043c \u044e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u043c \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c. \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0414\u041a\u0410 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0438 \u043d\u0438\u0432\u0435\u043b\u0438\u0440\u0443\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043e\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435:<\/p>\n<pre><code>$ regex-cli find match dense -q --repeat 1000000 \\    -p '(?m)^.*$' \\    -y 'this is a long line about the quick brown fox that jumped over the lazy dog' [.. snip ..]                  search time:  204.897593ms [.. snip ..] <\/code><\/pre>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u044d\u0442\u0430 \u0444\u043e\u0440\u043c\u0430 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0414\u041a\u0410 \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u0430, \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e \u043b\u0438\u0448\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0440.\u0432., \u043e\u0442\u0447\u0430\u0441\u0442\u0438 \u0438\u0437-\u0437\u0430 \u042e\u043d\u0438\u043a\u043e\u0434\u0430. \u0422\u0430\u043a \u0436\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0430 \u0414\u041a\u0410 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0440.\u0432. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043f\u043e\u043c\u0435\u0440\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0440\u043e\u0441\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438. \u041a\u0440\u0435\u0439\u0442 <code>regex<\/code> \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u0431\u044b\u0441\u0442\u0440\u044b\u043c \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0440.\u0432., \u043d\u043e \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0432\u0435\u0441\u043e\u043c\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c.<\/p>\n<p>\u0418\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438 \u0442\u0430\u043a \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0434\u0432\u0438\u0436\u043e\u043a \u043f\u043e\u043b\u043d\u044b\u0445 \u0414\u041a\u0410 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<p>\u0412\u0442\u043e\u0440\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f (\u0432 \u043a\u0440\u0435\u0439\u0442\u0435) \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0414\u041a\u0410 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u043d\u0451\u043c \u043a\u0440\u0430\u0439\u043d\u0435 \u043c\u0430\u043b\u043e. \u042d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0432 <code>regex-automata<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 (<code>Cache<\/code>) \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430. \u0427\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c, \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"rust\">use regex_automata::{     dfa::{dense, regex::Regex},     Match, };  fn main() {     let re = Regex::builder()         \/\/ We need to enable heuristic Unicode word boundary support,         \/\/ or else the regex below will fail to compile. Why? Because         \/\/ \\b is Unicode-aware by default, and the DFA engines don't         \/\/ support it on haystacks with non-ASCII Unicode codepoints.         \/\/ Enabling this comes with the downside of making it possible         \/\/ for a search to return an error. Namely, when the DFA sees         \/\/ a non-ASCII byte, it transitions to a special sentinel quit         \/\/ state, which in turn causes the search to stop and return an         \/\/ error.         .dense(dense::Config::new().unicode_word_boundary(true))         .build(r\"\\b\\w+\\b\")         .unwrap();      \/\/ Note that `find_iter` will panic if the underyling search returns     \/\/ an error! You can handle the error by using fallible APIs such as     \/\/ Regex::try_search.     let mut it = re.find_iter(\"Sherlock Holmes\");     assert_eq!(Some(Match::must(0, 0..8)), it.next());     assert_eq!(Some(Match::must(0, 9..15)), it.next());     assert_eq!(None, it.next()); } <\/code><\/pre>\n<p>\u0418 \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>regex-cli<\/code>:<\/p>\n<pre><code>$ regex-cli find match dense --no-table --unicode-word-boundary \\    -p '\\b\\w+\\b' \\    -y 'Sherlock Holmes' 0:0:8:Sherlock 0:9:15:Holmes <\/code><\/pre>\n<p>\u0417\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e <code>Cache<\/code> \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u0418 \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 \u0414\u041a\u0410, \u0438 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0441 \u043e\u0433\u043b\u044f\u0434\u043a\u043e\u0439 \u043d\u0430 \u044d\u0442\u043e, \u0414\u041a\u0410 \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/github.com\/rust-lang\/regex\/tree\/ag\/regex-automata\/regex-cli#example-serialize-a-dfa\" rel=\"noopener noreferrer nofollow\">\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u044b\u0440\u044b\u0435 \u0431\u0430\u0439\u0442\u044b<\/a>. \u0422\u043e\u0442 \u0436\u0435 \u0414\u041a\u0410 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0440\u0430\u0441\u0442\u043e\u0432\u0441\u043a\u0438\u0435 <code>std<\/code> \u0438 <code>alloc<\/code>, \u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e <code>core<\/code>.<\/p>\n<p>(\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0414\u041a\u0410 &#8212; \u044d\u0442\u043e \u0442\u043e\u0442 \u044e\u0437-\u043a\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0440\u0435\u043b\u0438\u0437\u0430 <code>regex-automata 0.1<\/code>. \u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u0440\u0435\u0439\u0442\u0435 <a href=\"https:\/\/github.com\/BurntSushi\/bstr\" rel=\"noopener noreferrer nofollow\"><code>bstr<\/code><\/a> \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u042e\u043d\u0438\u043a\u043e\u0434\u0430.)<\/p>\n<p>\u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0414\u041a\u0410 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b, \u043a\u043e\u0433\u0434\u0430 \u0440.\u0432. \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u042e\u043d\u0438\u043a\u043e\u0434\u0430 \u0438\u043b\u0438 \u043d\u0443\u0436\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c API. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0434 \u043d\u0438\u0436\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0440\u0443\u0447\u043d\u043e\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0432 \u0414\u041a\u0410:<\/p>\n<pre><code class=\"rust\">use regex_automata::{     dfa::{dense::DFA, Automaton},     Anchored, };  fn main() {     let re = DFA::new(r\"\\W\").unwrap();      \/\/ DFAs can have multiple start states, but only when there are look-around     \/\/ assertions. When there aren't any look-around assertions, as in this     \/\/ case, we can ask for a start state without providing any of the     \/\/ haystack.     let mut sid = re.universal_start_state(Anchored::No).unwrap();     \/\/ The UTF-8 encoding of ? is \\xF0\\x9F\\x92\\xA9.     sid = re.next_state(sid, 0xF0);     sid = re.next_state(sid, 0x9F);     sid = re.next_state(sid, 0x92);     sid = re.next_state(sid, 0xA9);     sid = re.next_eoi_state(sid);     assert!(re.is_match_state(sid)); } <\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0414\u041a\u0410 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u044f \u0435\u043c\u0443 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443 \u0437\u0430 \u0440\u0430\u0437. \u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0439, \u043d\u043e \u043e\u043d \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 API \u0432\u044b\u0437\u043e\u0432\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c. \u0415\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a \u0442\u0440\u0435\u0439\u0442\u0443 <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/dfa\/trait.Automaton.html\" rel=\"noopener noreferrer nofollow\"><code>Automation<\/code><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0414\u041a\u0410, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u0443\u043f\u043b\u043e\u0442\u043d\u0451\u043d\u043d\u044b\u0435 \u0414\u041a\u0410.<\/p>\n<p><a class=\"anchor\" name=\"eng_lazy\" id=\"eng_lazy\"><\/a><\/p>\n<h3>\u0414\u0432\u0438\u0436\u043e\u043a: \u0413\u0438\u0431\u0440\u0438\u0434 \u041d\u041a\u0410 \u0438 \u0414\u041a\u0410<\/h3>\n<p>\u0413\u0438\u0431\u0440\u0438\u0434 \u041d\u041a\u0410 \u0438 \u0414\u041a\u0410, \u0438\u043b\u0438 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/hybrid\/regex\/struct.Regex.html\" rel=\"noopener noreferrer nofollow\">&#171;\u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410&#187;<\/a> &#8212; \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 \u0414\u041a\u0410 \u0434\u0432\u0438\u0436\u043e\u043a, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u0430. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0414\u041a\u0410 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f &#171;ahead-of-time compiled&#187;, \u0442\u043e \u043b\u0435\u043d\u0438\u0432\u044b\u0439 &#8212; &#171;jist-in-time compiled&#187;.<\/p>\n<p>(\u041d\u0430\u0437\u044b\u0432\u0430\u044f \u044d\u0442\u043e JIT\u043e\u043c, \u044f \u043c\u043e\u0433\u0443 \u0441\u0431\u0438\u0442\u044c \u0441 \u0442\u043e\u043b\u043a\u0443. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 (\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440.\u0432.), \u043f\u043e\u0434 JIT \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0440.\u0432. \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (\u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435), \u043f\u043e\u0434\u043e\u0431\u043d\u043e JIT\u0443 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 PCRE2. \u042d\u0442\u043e \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0434\u0435\u0441\u044c.)<\/p>\n<p>\u0423 \u043b\u0435\u043d\u0438\u0432\u043e\u0433\u043e \u0414\u041a\u0410 \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 API, \u043a\u0430\u043a \u0438 \u0443 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0414\u041a\u0410, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e, \u043a\u0430\u043a \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432., \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0442\u0438\u043f\u0430 <code>Cache<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c, \u043a\u0440\u043e\u043c\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432.<\/p>\n<pre><code class=\"rust\">use regex_automata::{     hybrid::{dfa, regex::Regex},     Match, };  fn main() {     let re = Regex::builder()         \/\/ As with the fully compiled DFA, we need to enable heuristic         \/\/ Unicode word boundary support for the lazy DFA as well. It         \/\/ will return an error if a non-ASCII codepoint is seen when         \/\/ the regex contains a Unicode word boundary, just like the         \/\/ full DFA.         .dfa(dfa::Config::new().unicode_word_boundary(true))         .build(r\"\\b\\w+\\b\")         .unwrap();     let mut cache = re.create_cache();      \/\/ Note that find_iter will panic if the underyling search returns     \/\/ an error! You can handle the error by using fallible APIs such     \/\/ as Regex::try_search.     let mut it = re.find_iter(&amp;mut cache, \"Sherlock Holmes\");     assert_eq!(Some(Match::must(0, 0..8)), it.next());     assert_eq!(Some(Match::must(0, 9..15)), it.next());     assert_eq!(None, it.next()); } <\/code><\/pre>\n<p>\u0418 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>regex-cli<\/code>:<\/p>\n<pre><code>$ regex-cli find match hybrid --no-table --unicode-word-boundary \\    -p '\\b\\w+\\b' \\    -y 'Sherlock Holmes' 0:0:8:Sherlock 0:9:15:Holmes <\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0447\u0442\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0441 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0414\u041a\u0410, \u043a\u0440\u043e\u043c\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>Cache<\/code>. \u0421\u0445\u043e\u0436\u0435\u0441\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u043d\u0430 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 API \u0432\u044b\u0437\u043e\u0432\u044b:<\/p>\n<pre><code class=\"rust\">use regex_automata::{hybrid::dfa::DFA, Input};  fn main() {     let re = DFA::new(r\"\\W\").unwrap();     let mut cache = re.create_cache();      \/\/ DFAs can have multiple start states, but only when there are     \/\/ look-around assertions. When there aren't any look-around     \/\/ assertions, as in this case, we can ask for a start state     \/\/ without providing any of the haystack. Full DFAs have a     \/\/ dedicated routine for this because the universality can be     \/\/ checked for us. But lazy DFAs don't compute all of their start     \/\/ states up front. So we just kind of fake it and ask for a start     \/\/ state given some dummy haystack.     let mut sid = re.start_state_forward(&amp;mut cache, &amp;Input::new(\"\")).unwrap();     \/\/ The UTF-8 encoding of ? is \\xF0\\x9F\\x92\\xA9.     sid = re.next_state(&amp;mut cache, sid, 0xF0).unwrap();     sid = re.next_state(&amp;mut cache, sid, 0x9F).unwrap();     sid = re.next_state(&amp;mut cache, sid, 0x92).unwrap();     sid = re.next_state(&amp;mut cache, sid, 0xA9).unwrap();     sid = re.next_eoi_state(&amp;mut cache, sid).unwrap();     assert!(sid.is_match()); } <\/code><\/pre>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>Cache<\/code> \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044d\u0442\u0438 \u0432\u044b\u0437\u043e\u0432\u044b API \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0435\u0449\u0451 \u0438 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043c\u0435\u0442\u043e\u0434\u0430, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0431\u043e <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/struct.MatchError.html\" rel=\"noopener noreferrer nofollow\"><code>MatchError<\/code><\/a>, \u043b\u0438\u0431\u043e <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/hybrid\/struct.CacheError.html\" rel=\"noopener noreferrer nofollow\"><code>CacheError<\/code><\/a>. <code>MatchError<\/code> \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u043f\u0435\u0440\u0435\u0448\u0451\u043b \u0441\u0440\u0430\u0437\u0443 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. (\u041a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u0438\u0441\u043a \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u043d\u0438\u0446 \u0441\u043b\u043e\u0432 \u042e\u043d\u0438\u043a\u043e\u0434\u0430 (heuristic Unicode word boundary), \u0438 \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0435-ASCII \u0431\u0430\u0439\u0442.) <code>CacheError<\/code> \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0451\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0435\u0448\u0430.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043e \u043a\u0435\u0448\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0439 \u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439, \u0442\u0430\u043a \u0438 \u0441\u0430\u043c\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043b\u0430\u0431\u043e\u0441\u0442\u044c\u044e. \u041b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410, \u043a\u0430\u043a \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u0438\u0441\u043a\u0430. \u0415\u0441\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e, \u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ol>\n<li>\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u043a\u0435\u0448\u0430, \u043d\u043e \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0441\u043b\u043e, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0437 \u043a\u0443\u0447\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0441\u0442\u043e\u0433\u0430, \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u0432 <code>Cache<\/code>. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0443\u0436\u0435 \u0431\u044b\u043b \u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d \u0432 \u043a\u0435\u0448\u0435, \u0442\u043e \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f &#171;\u043a\u0430\u043a \u0435\u0441\u0442\u044c&#187; \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u0435\u0440\u0435\u0445\u043e\u0434 &#8212; \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 &#8212; \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Powerset_construction\" rel=\"noopener noreferrer nofollow\">\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u041d\u041a\u0410<\/a>. \u0412 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <code>O(m)<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0435\u0448 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0435\u0433\u043e \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0438 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0440\u0430\u043d\u0435\u0435, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u043e\u0448\u0438\u0431\u043a\u0443, \u0435\u0441\u043b\u0438 \u043a\u0435\u0448 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e. \u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u0439\u0442 \u0441\u0442\u043e\u0433\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0438\u0441\u043a, \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0414\u041a\u0410. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u043c\u043e \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0414\u041a\u0410 \u0432 \u043a\u0435\u0448\u0435, \u0442\u043e, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0435\u0435, \u0434\u0430\u0436\u0435 \u0434\u0432\u0438\u0436\u043e\u043a <code>PikeVM<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u0431\u044b\u0441\u0442\u0440\u0435\u0435. (\u0422\u0430\u043a \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0447\u0438\u0441\u0442\u043e\u043a \u043a\u0435\u0448\u0430).<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0414\u041a\u0410 \u0438 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0441\u0442\u043e\u0433\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043b\u0435\u043d\u0438\u0432\u043e\u0433\u043e \u0414\u041a\u0410 \u0445\u0443\u0434\u0448\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <code>O(m * n)<\/code>, \u0430 \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 &#8212; \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u043e\u0431\u044a\u0451\u043c\u043e\u043c \u043a\u0435\u0448\u0430, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0418 \u0442.\u043a. \u0441\u0430\u043c\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043b\u0435\u043d\u0438\u0432\u043e\u0433\u043e \u0414\u041a\u0410 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0414\u041a\u0410 (\u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439), \u0442\u043e \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0445\u0443\u0434\u0448\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0414\u041a\u0410. \u0422.\u0435. \u043c\u044b \u0438\u0437\u0431\u0435\u0433\u0430\u0435\u043c \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439\/\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043a\u0435\u0448\u0438\u0440\u0443\u044e\u0442\u0441\u044f. \u0422.\u043e. \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0437\u0430 <code>O(n)<\/code> \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0414\u041a\u0410 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0430.<\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043d\u0435\u043f\u043e\u043c\u0435\u0440\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u042e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u0422.\u043a. \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0430\u0439\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0434\u0451\u0442 \u043f\u043e\u0438\u0441\u043a, \u0442\u043e \u043f\u043e\u0438\u0441\u043a \u042e\u043d\u0438\u043a\u043e\u0434\u043d\u043e\u0433\u043e <code>\\w<\/code> \u0432 \u0441\u0442\u043e\u0433\u0435, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 ASCII, \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e ASCII-\u0447\u0430\u0441\u0442\u0438. \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435.<\/p>\n<p>\u041b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u0438\u043c\u0435\u0435\u0442 \u0441\u043a\u043b\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043b\u043e\u0445\u043e \u043d\u0430 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043a\u0435\u0448 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0435\u0433\u043e \u043e\u0447\u0438\u0441\u0442\u043a\u0443. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0440.\u0432. \u0441\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u0438\u043b\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u0442\u043e\u0433 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u043f\u043d\u043e\u0433\u043e \u0414\u041a\u0410. (\u0420.\u0432. \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0438\u0437-\u0437\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432. \u041e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u0440.\u0432.) \u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u044e\u0442 \u044d\u0442\u043e \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043e\u0448\u0438\u0431\u043a\u0438. \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432., \u043f\u043e\u0438\u0441\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0434\u0432\u0438\u0436\u043a\u043e\u043c \u0440.\u0432. (\u043e\u0431\u044b\u0447\u043d\u043e \u0441 <code>PikeVM<\/code>)<\/p>\n<p><a class=\"anchor\" name=\"eng_meta\" id=\"eng_meta\"><\/a><\/p>\n<h3>\u041c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a<\/h3>\n<p><a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/meta\/struct.Regex.html\" rel=\"noopener noreferrer nofollow\">\u041c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432.<\/a> \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0432\u0441\u0435 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u043f\u043e\u0434 \u043e\u0434\u043d\u0438\u043c \u0431\u0435\u0437\u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u043c API, \u043f\u044b\u0442\u0430\u044f\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438. \u0422\u0430\u043a \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0439 API \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u044f\u0432\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>Cache<\/code> \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u043e\u0438\u0441\u043a\u0435. \u0414\u0432\u0438\u0436\u043e\u043a \u0431\u0435\u0440\u0451\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u044d\u0442\u043e, \u0445\u0440\u0430\u043d\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>Cache<\/code> \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u043f\u0443\u043b\u0435. (\u0414\u0432\u0438\u0436\u043e\u043a \u043c\u0435\u0442\u0430 \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b API, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>Cache<\/code> \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u042d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u043f\u0443\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438.)<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432. \u043e\u0447\u0435\u043d\u044c \u0431\u043b\u0438\u0437\u043a\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u043c\u0443 API \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043c\u0435\u0442\u043e\u0434\u044b <code>regex::Regex<\/code>, <code>regex::RegexSet<\/code>, <code>regex::bytes::Regex<\/code> \u0438 <code>regex::bytes::RegexSet<\/code> \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0430\u043c\u0438 \u043d\u0430\u0434 \u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043a\u043e\u043c. \u0422\u0430\u043a \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 API, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0442 99% \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043a \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u0430\u043c API, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e, \u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443:<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432. \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0438 \u043f\u043e\u0438\u0441\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a, \u0442\u043e\u0433\u0434\u0430 \u044d\u0442\u0430\u043f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0440.\u0432. (\u0432\u043a\u043b\u044e\u0447\u0430\u044f <code>\u041d\u041a\u0410<\/code>) \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/regex_automata\/util\/prefilter\/struct.Prefilter.html\" rel=\"noopener noreferrer nofollow\"><code>\u041f\u0440\u0435\u0444\u0438\u043b\u044c\u0442\u0440\u0430<\/code><\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f &#171;\u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f&#187; \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0440.\u0432. \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u043a \u043a\u043e\u043d\u0446\u0443 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>$<\/code>, \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u0438\u0441\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u043c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0442\u043e\u0433\u0430 (\u043e\u0442 \u043a\u043e\u043d\u0446\u0430 \u043a \u043d\u0430\u0447\u0430\u043b\u0443). \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f &#171;\u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u044f\u043a\u043e\u0440\u043d\u043e\u0439&#187; (reverse anchored) \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u0440.\u0432. \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <code>Prefilter<\/code> \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e, \u043d\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0430 \u0438\u0437 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u0430 \u0440.\u0432., \u0442\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u044d\u0442\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 \u0441\u0442\u043e\u0433\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0441 \u0440.\u0432. \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f &#171;\u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043d\u043e\u0439&#187; (reverse suffix) \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u044b\u0445 \u0438 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043d\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439, \u043d\u043e \u0442\u0430\u043a\u043e\u0432\u0430\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 \u0447\u0430\u0441\u0442\u0438, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u0441\u0442\u043e\u0433\u0435 \u044d\u0442\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041c\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c \u0440.\u0432. \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u044f\u0445, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u044b\u043b\u0430 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0430 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0440.\u0432. (reverse regex), \u0430 \u0432\u0442\u043e\u0440\u0430\u044f &#8212; \u0432 \u043f\u0440\u044f\u043c\u043e\u0435 (forward regex). \u041a\u043e\u0433\u0434\u0430 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u043d\u0430\u0439\u0434\u0435\u043d, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u044f \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u043d\u0435\u0446 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u044f \u0432\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0432 \u043f\u0440\u044f\u043c\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 (\u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043a \u043a\u043e\u043d\u0446\u0443).<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a &#171;core&#187; \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432.: <code>PikeVM<\/code>, <code>BoundedBacktracker<\/code>, \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410, \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0414\u041a\u0410. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e <code>PikeVM<\/code>. \u042d\u0442\u0438 \u0434\u0432\u0438\u0436\u043a\u0438 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e):<\/p>\n<ul>\n<li>\n<p>\u0413\u0434\u0435 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 (\u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u0414\u041a\u0410, \u0435\u0441\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d) \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0414\u041a\u0410 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0434\u0432\u0438\u0436\u043a\u043e\u0432 (<code>PikeVM<\/code>, <code>BoundedBacktracker<\/code> \u0438\u043b\u0438 \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0414\u041a\u0410). \u0414\u041a\u0410 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445: \u0440.\u0432. \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u042e\u043d\u0438\u043a\u043e\u0434\u043e\u0432\u0441\u043a\u0443\u044e \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0441\u043b\u043e\u0432, \u0430 \u0441\u0442\u043e\u0433 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435-ASCII \u0441\u0438\u043c\u0432\u043e\u043b; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c <code>Cache<\/code>, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430, \u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435: \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410, <code>BoundedBacktracker<\/code> \u0438 <code>PikeVM<\/code>.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u044b\u0442\u043e\u0436\u0438\u0442\u044c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0432\u0435\u0441\u0442\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e \u043a \u0434\u0432\u0443\u043c \u043f\u0443\u043d\u043a\u0442\u0430\u043c:<\/p>\n<ul>\n<li>\n<p>\u0418\u0441\u043a\u0430\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0433\u0434\u0435 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>PikeVM<\/code>, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0451. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435. \u0418 \u0447\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 <code>PikeVM<\/code>, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435.<\/p>\n<p>\u041c\u043d\u043e\u0433\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432. \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430. \u0418 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0441\u0430\u043c\u044b\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442 \u043d\u0435\u043c\u0430\u043b\u044b\u0435 \u0443\u0441\u0438\u043b\u0438\u044f \u0432 \u044d\u0442\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438. <a href=\"https:\/\/github.com\/intel\/hyperscan\" rel=\"noopener noreferrer nofollow\"><code>\u0413\u0438\u043f\u0435\u0440\u0441\u043a\u0430\u043d<\/code><\/a> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c \u0437\u043e\u043b\u043e\u0442\u044b\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c, \u043d\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432. \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u0437\u0430\u0445\u043e\u0434\u044f\u0442 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u043a\u043e, \u043a\u0430\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u044b\u0448\u0435. (\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043f\u043e\u0440\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0433\u0438\u043f\u0435\u0440\u0441\u043a\u0430\u043d \u0434\u0432\u0438\u0436\u043a\u043e\u043c \u0440.\u0432. &#171;\u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f&#187; \u0438\u043b\u0438 \u043d\u0435\u0442. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u043c\u043e\u0438\u0445 \u043b\u0438\u0447\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u043e\u0442\u0438\u0432 \u044d\u0442\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>\\w+<\/code> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>abc<\/code> \u0442\u0440\u0438 \u0440\u0430\u0437\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0433\u0438\u043f\u0435\u0440\u0441\u043a\u0430\u043d \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f\u0445 \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \u0418, \u043d\u0435\u0441\u043e\u043c\u043d\u0435\u043d\u043d\u043e, \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440, \u0435\u0441\u043b\u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f.) \u041e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043d\u0430\u044f \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0443\u0434\u0440\u0451\u043d\u043d\u044b\u0435. \u041e\u043d\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438, \u043d\u043e \u0441 \u043d\u0438\u043c\u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438: \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 (\u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441\u0442\u043e\u0433\u0430).<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440.\u0432. <code>[A-Z].*bcdefghijklmnopq<\/code> \u043d\u0430 \u0441\u0442\u043e\u0433\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c <code>bcdefghijklmnopq<\/code> \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0441\u043d\u043e\u0432\u0430 \u0438 \u0441\u043d\u043e\u0432\u0430. \u0417\u0434\u0435\u0441\u044c \u043d\u0435\u0442 &#171;\u0445\u043e\u0440\u043e\u0448\u0435\u0439&#187; \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u044c. \u0422\u0430\u043a \u0447\u0442\u043e, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0441 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0432\u044b\u0448\u0435, \u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c &#171;\u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043d\u0443\u044e&#187; \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u0430 <code>bcdefghijklmnopq<\/code>. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u044d\u0442\u043e\u0442 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0434\u043b\u044f \u043d\u0430\u0438\u0445\u0443\u0434\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439: \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u043e, \u043d\u043e \u043d\u0438 \u043e\u0434\u0438\u043d \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f. \u041d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043b\u043e\u0445\u0430\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430. \u0421\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0448\u0438\u0445 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 <code>O(m * n)<\/code>. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0434\u0435\u0441\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0435\u0449\u0451 \u0438 <code>.*<\/code>, \u0438 \u0447\u0442\u043e, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u043e\u0433\u0430 \u0434\u043e \u0435\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u043f\u043e \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u0443, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u043e\u0433\u0430 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0434\u043e \u0435\u0433\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430. \u042d\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430 <code>O(m * n^2)<\/code>. \u0410 \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u043e.<\/p>\n<p>\u0425\u043e\u0442\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0440.\u0432. \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u0447\u043d\u043e \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0441\u0443\u0444\u0444\u0438\u043a\u0441 <code>bcdefghijklmnopq<\/code> \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c, <code>.*<\/code>. \u042d\u0442\u043e, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043e\u043d\u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e.<\/p>\n<p>\u041d\u0430\u043f\u0440\u043e\u0442\u0438\u0432, \u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432. \u0441\u043c\u044f\u0433\u0447\u0430\u0435\u0442 \u044d\u0442\u043e, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0434\u0432\u0438\u0436\u043a\u0430 \u0414\u041a\u0410. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e, \u043e\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u0438\u0441\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u043e\u0433\u0435. \u042d\u0442\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u043e\u043d\u0446\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0441 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043e\u043c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u043b\u0438 \u043f\u043e\u0438\u0441\u043a \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u0442\u043e \u043c\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u044b\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c. \u041c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a &#171;core&#187; \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435, \u0436\u0435\u0440\u0442\u0432\u0443\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430 \u0436\u0435 \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 &#171;reverse inner&#187;.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0434\u0432\u0438\u0436\u043a\u0430\u043c \u0440.\u0432., \u043d\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u043c\u0435\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c &#171;\u043a\u0440\u0443\u0442\u0438\u043b\u043e\u043a&#187;, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0443\u043b\u044c\u0442\u0438\u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 (multi-pattern) \u043f\u043e\u0438\u0441\u043a, \u0442\u043e\u0433\u0434\u0430 \u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c. \u0412\u0441\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432., \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435, \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043c\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u043b\u0430\u044e\u0442 \u0438\u0445 \u043c\u0435\u043d\u0435\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f.<\/p>\n<p><a class=\"anchor\" name=\"re2_diff\" id=\"re2_diff\"><\/a><\/p>\n<h2>\u041e\u0442\u043b\u0438\u0447\u0438\u044f \u043e\u0442 RE2<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 <a href=\"https:\/\/swtch.com\/~rsc\/regexp\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439 \u0420\u0430\u0441\u0441\u0430 \u041a\u043e\u043a\u0441\u0430 \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c<\/a>, \u0442\u043e\u0433\u0434\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u044b, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0432\u0430\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c\u0438. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e, \u0432 RE2 \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/google\/re2\/blob\/2d39b703d02645076fead8fa409a1711f0e84381\/re2\/nfa.cc\" rel=\"noopener noreferrer nofollow\">PikeVM<\/a> (\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e &#171;\u041d\u041a\u0410&#187;), <a href=\"https:\/\/github.com\/google\/re2\/blob\/2d39b703d02645076fead8fa409a1711f0e84381\/re2\/bitstate.cc\" rel=\"noopener noreferrer nofollow\">bounded backtracker<\/a> (\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 &#171;bitstate backtracker&#187;), <a href=\"https:\/\/github.com\/google\/re2\/blob\/2d39b703d02645076fead8fa409a1711f0e84381\/re2\/onepass.cc\" rel=\"noopener noreferrer nofollow\">\u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410<\/a> (\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 &#171;\u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u041d\u041a\u0410&#187;) \u0438 <a href=\"https:\/\/github.com\/google\/re2\/blob\/2d39b703d02645076fead8fa409a1711f0e84381\/re2\/dfa.cc\" rel=\"noopener noreferrer nofollow\">\u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410<\/a>. \u0422\u0430\u043c \u0442\u0430\u043a \u0436\u0435 \u0435\u0441\u0442\u044c <span>\u043c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432.<\/span> (\u0445\u043e\u0442\u044f \u0441\u0430\u043c \u0442\u0435\u0440\u043c\u0438\u043d \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u0442 \u0441\u0432\u043e\u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432. \u0432 \u043f\u043e\u0445\u043e\u0436\u0435\u0439 \u043c\u0430\u043d\u0435\u0440\u0435, \u043a\u0430\u043a \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0448\u0435. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0434\u0432\u0438\u0436\u043a\u043e\u043c, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0432\u044b\u0448\u0435, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u0432 RE2, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0414\u041a\u0410.<\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e, \u0435\u0441\u0442\u044c \u043b\u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0436\u0434\u0443 RE2 \u0438 \u043a\u0440\u0435\u0439\u0442\u043e\u043c <code>regex<\/code>?<\/p>\n<p>\u0421\u0445\u043e\u0434\u0441\u0442\u0432 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u0439. \u041d\u043e \u0432\u043e\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0433\u043e, \u0432 \u0447\u0451\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>RE2 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 leftmost-longest \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435 leftmost-first. Leftmost-longest \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 &#8212; \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432. POSIX.<\/p>\n<\/li>\n<li>\n<p>\u0412 RE2 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u042e\u043d\u0438\u043a\u043e\u0434\u0430. \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0447\u0435\u0441\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e RE2 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0443 \u0441 <a href=\"https:\/\/icu.unicode.org\/\" rel=\"noopener noreferrer nofollow\">ICU<\/a>, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u042e\u043d\u0438\u043a\u043e\u0434\u0430. \u041e\u0434\u043d\u0430\u043a\u043e, RE2 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c <code>\\w<\/code>, <code>\\s<\/code>, <code>\\d<\/code> \u0438 <code>\\b<\/code> \u0447\u0435\u0440\u0435\u0437 \u042e\u043d\u0438\u043a\u043e\u0434. RE2 \u0442\u0430\u043a \u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438, \u043a\u0440\u043e\u043c\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0440\u0443\u0434\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432 RE2 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 <code>[\\pL&amp;&amp;\\p{Greek}]<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 (codepoints), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0430\u043a \u0436\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438 \u0433\u0440\u0435\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430. (\u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u042e\u043d\u0438\u043a\u043e\u0434\u043e\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438, \u043d\u043e \u043e\u043d\u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u042e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432.)<\/p>\n<\/li>\n<li>\n<p>\u0412 RE2 \u0432\u0435\u0440\u0441\u0438\u0438 PikeVM, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e.<\/p>\n<\/li>\n<li>\n<p>\u0412 RE2 \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439, \u043d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0432 \u043a\u0440\u0435\u0439\u0442\u0435 <code>regex<\/code>. \u0412 RE2 \u0438\u043c\u0435\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/google\/re2\/blob\/2d39b703d02645076fead8fa409a1711f0e84381\/re2\/filtered_re2.h\" rel=\"noopener noreferrer nofollow\">Filtered RE2<\/a>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u043c\u0443 \u043a\u043e\u0434\u0443 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u0445\u043e\u0442\u044f \u0438 \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0412 RE2 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u044b\u0439 \u043a\u0435\u0448 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0435\u043d\u0438\u0432\u043e\u0433\u043e \u0414\u041a\u0410, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u043a\u0440\u0435\u0439\u0442\u0435 <code>regex<\/code> \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u0435\u0448 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0440\u0435\u0439\u0442 <code>regex<\/code> \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <code>regex-syntax<\/code> \u0438 <code>regex-automata<\/code> \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0432\u043e\u0438\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c. RE2 \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <code>regex-automata<\/code> \u0438\u043c\u0435\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043c\u0443\u043b\u044c\u0442\u0438\u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0445 \u0440.\u0432. \u0432\u043e \u0432\u0441\u0435\u0445 \u0434\u0432\u0438\u0436\u043a\u0430\u0445. \u0412 RE2 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 &#171;regex set&#187;, \u043d\u043e \u043e\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0431\u044b\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u0432 \u0441\u0442\u043e\u0433\u0435. <code>regex-automata<\/code>, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u043a \u0436\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u0441 \u0447\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u043b\u043e \u0440.\u0432., \u0430 \u0442\u0430\u043a \u0436\u0435 \u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u0445 \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044e \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0432 <code>regex-automata<\/code>. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e, \u043c\u043d\u0435 \u0431\u044b \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Glushkov%27s_construction_algorithm\" rel=\"noopener noreferrer nofollow\">\u041d\u041a\u0410 \u0413\u043b\u0443\u0448\u043a\u043e\u0432\u0430<\/a> \u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e-\u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e (a bit parallel) \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432. \u0422\u0430\u043a \u0436\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/gist.github.com\/pervognsen\/218ea17743e1442e59bb60d29b1aa725\" rel=\"noopener noreferrer nofollow\">\u0441\u0434\u0432\u0438\u0433\u043e\u0432\u044b\u0435 \u0414\u041a\u0410 (shift DFAs)<\/a>.<\/p>\n<p><a class=\"anchor\" name=\"testing\" id=\"testing\"><\/a><\/p>\n<h2>\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>\u041a\u0430\u043a \u0431\u044b\u043b\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0433\u0434\u0435-\u0442\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0434\u043b\u044f \u043a\u0440\u0435\u0439\u0442\u0430. \u0425\u0430\u043a\u0438 \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430, \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0430\u043b\u0438\u0441\u044c. \u0418 \u0432 \u0446\u0435\u043b\u043e\u043c, \u0441 \u043d\u0438\u043c\u0438 \u0431\u044b\u043b\u043e \u0442\u0440\u0443\u0434\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0438, \u0447\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u043d\u044f\u0442\u044c.<\/p>\n<p>\u041c\u043e\u044f \u0438\u0434\u0435\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u043e, \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>, \u0431\u044b\u043b\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u0438\u0434\u0435\u0435\u0439, \u0447\u0442\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 \u0431\u044b\u043b \u0431\u044b \u0441\u0432\u043e\u0439 \u043f\u0435\u0440\u0432\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u044b\u0439 API, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 &#171;\u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e&#187; \u0434\u0432\u0438\u0436\u043a\u0430. \u042f \u0442\u0430\u043a \u0436\u0435 \u0445\u043e\u0442\u0435\u043b \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0430 \u043d\u0435 \u0437\u0430\u043a\u0430\u043f\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0441\u0440\u0435\u0434\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0438\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0422\u0430\u043a \u0447\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c:<\/p>\n<ul>\n<li>\n<p>\u0412\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 TOML \u0444\u0430\u0439\u043b\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u042f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u043a\u0440\u0435\u0439\u0442 <a href=\"https:\/\/docs.rs\/regex-test\/0.1.*\/regex_test\/\" rel=\"noopener noreferrer nofollow\"><code>regex-test<\/code><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u0438 TOML \u0444\u0430\u0439\u043b\u044b \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u042f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442 \u043d\u0430 Rust \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0412\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0433\u043e \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u0438\u0437 TOML \u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u044b\u0435 \u043a \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u043c\u0443 \u0434\u0432\u0438\u0436\u043a\u0443.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u043c \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u0442\u043e\u0432\u0441\u043a\u0438\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432. (\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u043d\u0430\u0434 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u043c \u0431\u0430\u0433\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u0440\u043e\u0432\u0430\u043b\u0443 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0442\u0435\u0441\u0442\u043e\u0432, \u0442\u043e \u0447\u0430\u0441\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0435\u0441\u0442\u043e\u0432.)<\/p>\n<p>\u0415\u0441\u0442\u044c \u0442\u0430\u043a \u0436\u0435 \u043a\u0443\u0447\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u0442\u0435\u0441\u0442\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 <code>regex-automata<\/code> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 450 \u0442\u0435\u0441\u0442\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u0443\u0441\u043a\u043e\u043c <code>regex<\/code> 1.9, \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u0437-\u0442\u0435\u0441\u0442\u043e\u0432. \u042f \u043f\u043e\u043b\u0443\u0447\u0438\u043b <strong>\u0442\u043e\u043d\u043d\u0443<\/strong> \u043f\u043e\u043c\u043e\u0449\u0438 \u043e\u0442 <a href=\"https:\/\/github.com\/addisoncrump\" rel=\"noopener noreferrer nofollow\">\u042d\u0434\u0438\u0441\u043e\u043d\u0430 \u041a\u0440\u0430\u043c\u043f\u0430 (Addison Crump)<\/a>. \u0418 \u0431\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0433\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b \u0431\u044b, \u0435\u0441\u043b\u0438 \u0431\u044b \u043d\u0435 \u043e\u043d.<\/p>\n<p><a class=\"anchor\" name=\"benchmarking\" id=\"benchmarking\"><\/a><\/p>\n<h2>\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438\u043d\u0433<\/h2>\n<p>\u041a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044f \u0443\u0436\u0435 \u0441\u0442\u0430\u043b\u0430 \u0434\u043b\u0438\u043d\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u044f \u043f\u0438\u0441\u0430\u043b \u0434\u043e \u044d\u0442\u043e\u0433\u043e, \u0438 \u044f \u0435\u0449\u0451 \u043d\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u0437\u0430\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0425\u043e\u0442\u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u0443\u0434\u0435\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0432\u0441\u0435 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u044b \u043e\u0431 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u0445, \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e.<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u0431\u0430\u0440\u043e\u043c\u0435\u0442\u0440 \u0440.\u0432. \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/github.com\/BurntSushi\/rebar\" rel=\"noopener noreferrer nofollow\"><code>rebar<\/code><\/a>. \u041e\u043d \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u0437\u0430\u043c\u0435\u0440\u0430\u043c\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>. \u041e\u043d \u0442\u0430\u043a \u0436\u0435 \u0443\u043c\u0435\u0435\u0442 \u0437\u0430\u043c\u0435\u0440\u044f\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432. \u042f \u0443\u0431\u0435\u0436\u0434\u0451\u043d, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043b\u043d\u044b\u0439 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u0434\u043b\u044f \u0440.\u0432., \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<p>\u0421\u0440\u0435\u0434\u0438 242 \u0437\u0430\u043c\u0435\u0440\u043e\u0432, \u043a\u0440\u0435\u0439\u0442 <code>regex 1.9<\/code> \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0432 1.5 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c <code>regex 1.7.3<\/code> \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0438\u0441\u043a\u0430. (\u042f \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b \u0441 <code>1.7<\/code>, \u0430 \u043d\u0435 \u0441 <code>1.8<\/code> \u043f\u043e \u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e <code>1.8<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u044b\u043c \u0432\u044b\u043f\u0443\u0441\u043a\u043e\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u0410 \u0432\u044b\u043f\u0443\u0441\u043a <code>1.9<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b \u043f\u0435\u0440\u0435\u0445\u043e\u0434.)<\/p>\n<pre><code>$ rebar rank record\/all\/2023-07-02\/*.csv \\    --intersection \\    -M compile \\    -e '^(rust\/regex|rust\/regexold)$' Engine         Version  Geometric mean of speed ratios  Benchmark count ------         -------  ------------------------------  --------------- rust\/regex     1.8.4    1.08                            242 rust\/regexold  1.7.3    2.61                            242 <\/code><\/pre>\n<p>\u041d\u043e \u0432\u0440\u0435\u043c\u044f, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0440.\u0432. \u0443\u0445\u0443\u0434\u0448\u0438\u043b\u043e\u0441\u044c:<\/p>\n<pre><code>$ rebar rank record\/all\/2023-07-02\/*.csv \\    --intersection \\    -m compile \\    -e '^(rust\/regex|rust\/regexold)$' Engine         Version  Geometric mean of speed ratios  Benchmark count ------         -------  ------------------------------  --------------- rust\/regexold  1.7.3    1.07                            28 rust\/regex     1.8.4    1.46                            28 <\/code><\/pre>\n<p>\u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0432\u044b\u0448\u0435, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0433\u0440\u0443\u0431\u043e\u0439 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u043e\u0439. \u042f \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0432\u0441\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0437\u0434\u0435\u0441\u044c. \u0415\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u0438 \u0438\u0445 \u0440\u0430\u0437\u043d\u0438\u0446\u0443, \u043c\u043e\u0436\u043d\u043e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0432\u044b\u0448\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c <code>rebar rank<\/code> \u043d\u0430 <code>rebar cmp<\/code>. (\u0418 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u043a\u043e\u0440\u043d\u0435 <a href=\"https:\/\/github.com\/BurntSushi\/rebar\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f <code>rebar<\/code><\/a> \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e (checkout).)<\/p>\n<pre><code>$ rebar cmp record\/all\/2023-07-02\/*.csv \\    --threshold-min 2 \\    --intersection \\    -M compile \\    -e '^(rust\/regex|rust\/regexold)$' <\/code><\/pre>\n<p>\u042f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043e\u043f\u0446\u0438\u044e <code>--threshold-min 2<\/code> \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 2x.<\/p>\n<p><a class=\"anchor\" name=\"costs\" id=\"costs\"><\/a><\/p>\n<h2>\u0426\u0435\u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u0430<\/h2>\n<p>\u041d\u0438 \u043e\u0434\u043d\u043e \u0434\u043e\u0431\u0440\u043e\u0435 \u0434\u0435\u043b\u043e \u043d\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0431\u0435\u0437\u043d\u0430\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c. \u0422\u0430\u043a \u0447\u0435\u0433\u043e \u0436\u0435 \u043c\u043d\u0435 \u0441\u0442\u043e\u0438\u043b\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e?<\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e \u0443\u0448\u043b\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0435\u0433\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0423\u0441\u0443\u0433\u0443\u0431\u0438\u043b\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0438 \u0442\u043e, \u0447\u0442\u043e <a href=\"https:\/\/github.com\/BurntSushi\/blog\/commit\/8ea55788f2eb8226343fdbefaaee189412bd3c1c\" rel=\"noopener noreferrer nofollow\">\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0443 \u043c\u0435\u043d\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0440\u0430\u043d\u044c\u0448\u0435<\/a>. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0432\u0440\u043e\u0434\u0435 ripgrep \u043d\u0435 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u043b\u0438\u0441\u044c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0434\u043e\u043b\u0433\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u044d\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u0434\u0430. \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f &#8212; \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0445\u0430\u043a\u0435\u0440\u044b \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>. \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u043a\u043e\u0434\u0430, \u0447\u0442\u043e \u0432\u0435\u0434\u0451\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n<p>\u0412-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u044d\u0442\u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u044b \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u044f \u043d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0441\u043b\u043e\u043c\u0430\u0442\u044c API \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0431\u0435\u0437 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043b\u043e\u043c\u0430\u044e\u0449\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0432\u044b\u043f\u0443\u0441\u043a\u0435 <code>regex-automata<\/code>. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0442\u0430\u043a \u043a\u043e\u043d\u0441\u0435\u0440\u0432\u0430\u0442\u0438\u0432\u0435\u043d, \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>, \u043d\u043e \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u044d\u0442\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u042d\u0442\u043e \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u0435\u0440\u043e\u0432. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c \u043a\u043e\u0434 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API.<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code> \u0443\u0436\u0435 \u0438\u043c\u0435\u043b \u0440\u0435\u043f\u0443\u0442\u0430\u0446\u0438\u044e \u043c\u0435\u043d\u0435\u0435-\u0447\u0435\u043c-\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u0432 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0438 \u0442.\u043a. \u044d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0435\u0449\u0435\u0439 \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 <em>\u0445\u0443\u0436\u0435<\/em>, \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043c\u044f\u0433\u0447\u0438\u0442\u044c \u044d\u0442\u043e \u0434\u0432\u0443\u043c\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0443\u0442\u044f\u043c\u0438:<\/p>\n<ol>\n<li>\n<p>\u041a\u0430\u043a \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435, \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u0432\u0438\u0436\u043e\u043a \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0414\u041a\u0410 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c. \u042d\u0442\u043e\u0442 \u0434\u0432\u0438\u0436\u043e\u043a \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0430 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0435 \u0442\u0430\u043a\u043e\u0435 \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435.<\/p>\n<\/li>\n<li>\n<p>\u042f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u043d\u043e\u0432\u044b\u0439 \u043a\u0440\u0435\u0439\u0442 <a href=\"https:\/\/docs.rs\/regex-lite\" rel=\"noopener noreferrer nofollow\"><code>regex-lite<\/code><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u0440\u043e\u043b\u0438 <em>\u043f\u043e\u0447\u0442\u0438<\/em> \u043f\u043e\u043b\u043d\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u044b \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>. \u0415\u0433\u043e \u0434\u0438\u0437\u0430\u0439\u043d \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u043f\u043e\u0447\u0442\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0434\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 \u0443\u0449\u0435\u0440\u0431 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u0430 \u0438\u043c\u0435\u043d\u043d\u043e, \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u042e\u043d\u0438\u043a\u043e\u0434\u0430) \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0412\u044b \u0432\u0441\u0451 \u0435\u0449\u0451 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432 <code>O(m * n)<\/code>, \u043d\u043e \u0431\u0435\u0437 \u043f\u0438\u0436\u043e\u043d\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u042e\u043d\u0438\u043a\u043e\u0434\u0430 \u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0438\u0441\u043a\u0430. \u041d\u043e \u0432\u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u0423 <code>regex-lite<\/code> \u043d\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 (zero dependencies). \u0423 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0441 \u043a\u0440\u0435\u0439\u0442\u043e\u043c <code>regex<\/code> (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 \u0440.\u0432.).<\/p>\n<\/li>\n<\/ol>\n<p><code>regex-lite<\/code> \u0432\u0441\u0451 \u0435\u0449\u0451 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430, \u043d\u043e \u043e\u043d \u043f\u0440\u0438\u0437\u0432\u0430\u043d \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u043e\u0434\u0430. \u0414\u0430\u0436\u0435 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code> \u0438\u043c\u0435\u0435\u0442 \u0446\u0435\u043b\u044b\u0439 \u0432\u043e\u0440\u043e\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439, \u0442\u0430\u043a \u0438 \u042e\u043d\u0438\u043a\u043e\u0434-\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043e\u043d \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c\u0441\u044f \u043a \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex-lite<\/code>.<\/p>\n<p><a class=\"anchor\" name=\"wrapup\" id=\"wrapup\"><\/a><\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0431\u043b\u043e\u0433\u0435 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0435 \u043e \u0441\u0430\u043c\u044b\u0445 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code>. \u0412\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0440\u0443\u0434\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e API. \u0421 \u0443\u0447\u0451\u0442\u043e\u043c \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e, \u044d\u0442\u043e\u0442 \u0431\u043b\u043e\u0433 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b. \u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u0430\u043c \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a <a href=\"https:\/\/docs.rs\/regex-automata\/0.3.*\/\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e API <code>regex-automata<\/code><\/a> \u0437\u0430 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0434\u0435\u0442\u0430\u043b\u0435\u0439 \u0438 \u0442\u043e\u043d\u043d\u0430\u043c \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432.<\/p>\n<p>\u041b\u044e\u0431\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <a href=\"https:\/\/github.com\/rust-lang\/regex\/discussions\" rel=\"noopener noreferrer nofollow\">GitHub Discussions<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/755940\/\"> https:\/\/habr.com\/ru\/articles\/755940\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440<\/h2>\n<p>\u042d\u0442\u043e \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 <strong>\u0431\u043e\u043b\u044c\u0448\u043e\u0439<\/strong> \u0438 <strong>\u0441\u043b\u043e\u0436\u043d\u043e\u0439<\/strong> \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code> \u0441\u0432\u0435\u0436\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043d\u0430\u0431\u0438\u0442\u044c \u0441\u043a\u0438\u043b\u043b \u0432 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c. \u041f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0439 \u0441\u0442\u0438\u043b\u044c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a \u043e\u043d\u043e \u0442\u0430\u043c \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e, \u0430 \u0432 \u043a\u043d\u0438\u0433\u0435 \u0424\u0440\u0438\u0434\u0434\u043b\u0430 \u0438\u043b\u0438 \u0432 \u043a\u043d\u0438\u0433\u0435 \u0434\u0440\u0430\u043a\u043e\u043d\u0430 \u0432\u044b \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439, \u0442\u043e \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c &#8212; \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e <strong>\u0438 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e<\/strong>.<\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0417\u043d\u0430\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u0432 (\u0437\u043d\u0430\u0442\u044c \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u0414\u041a\u0410 \u043e\u0442 \u041d\u041a\u0410)<\/p>\n<\/li>\n<li>\n<p>\u0418\u043c\u0435\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f \u043f\u043e \u044f\u0437\u044b\u043a\u0443 Rust<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u0449\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043f\u0440\u043e\u0448\u0443 \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0438 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430\u0445, \u0447\u0442\u043e\u0431\u044b \u044f \u043c\u043e\u0433 \u0438\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\"><a class=\"anchor\" name=\"toc\" id=\"toc\"><\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#brief_history\" rel=\"noopener noreferrer nofollow\">\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#problems\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#pr_composition\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#pr_testing\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#pr_niche_apis\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043d\u0438\u0448\u0435\u0432\u044b\u0435 API<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#pr_compiled_fsa\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0414\u041a\u0410<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#regex_cli\" rel=\"noopener noreferrer nofollow\">\u041f\u043e \u043f\u0443\u0442\u0438 \u0441 regex-cli<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#data_flow\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#lit_optimize\" rel=\"noopener noreferrer nofollow\">\u041b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#lit_motivation\" rel=\"noopener noreferrer nofollow\">\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#lit_extraction\" rel=\"noopener noreferrer nofollow\">\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#lit_search\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0438\u0441\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#nfa_data_type\" rel=\"noopener noreferrer nofollow\">\u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 &#8212; \u041d\u041a\u0410<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#nfa_simple_example\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u041d\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#nfa_sparse_state\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u041d\u041a\u0410: \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#nfa_utf8_minimal\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u041d\u041a\u0410: \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0434\u043b\u044f UTF-8<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#nfa_literal_trie\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u041d\u041a\u0410: \u0434\u0435\u0440\u0435\u0432\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#nfa_future_work\" rel=\"noopener noreferrer nofollow\">\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u041d\u041a\u0410<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#regex_engines\" rel=\"noopener noreferrer nofollow\">\u0414\u0432\u0438\u0436\u043a\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#eng_common\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u0441\u0435\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#eng_pikevm\" rel=\"noopener noreferrer nofollow\">\u0414\u0432\u0438\u0436\u043e\u043a: <code>PikeVM<\/code><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#eng_bb\" rel=\"noopener noreferrer nofollow\">\u0414\u0432\u0438\u0436\u043e\u043a: <code>BoundedBacktracker<\/code><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#eng_onepassfsa\" rel=\"noopener noreferrer nofollow\">\u0414\u0432\u0438\u0436\u043e\u043a: \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#eng_fsa\" rel=\"noopener noreferrer nofollow\">\u0414\u0432\u0438\u0436\u043e\u043a: \u0414\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#eng_lazy\" rel=\"noopener noreferrer nofollow\">\u0414\u0432\u0438\u0436\u043e\u043a: \u0433\u0438\u0431\u0440\u0438\u0434 \u041d\u041a\u0410\/\u0414\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#eng_meta\" rel=\"noopener noreferrer nofollow\">\u041c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#re2_diff\" rel=\"noopener noreferrer nofollow\">\u041e\u0442\u043b\u0438\u0447\u0438\u044f \u043e\u0442 RE2<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#testing\" rel=\"noopener noreferrer nofollow\">\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#benchmarking\" rel=\"noopener noreferrer nofollow\">\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438\u043d\u0433<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#costs\" rel=\"noopener noreferrer nofollow\">\u0426\u0435\u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#wrapup\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043b\u0435\u0442, \u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043b <a href=\"https:\/\/github.com\/rust-lang\/regex\/\" rel=\"noopener noreferrer nofollow\">\u043a\u0440\u0435\u0439\u0442 regex<\/a>, \u0447\u0442\u043e\u0431\u044b \u043b\u0443\u0447\u0448\u0435 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0451 \u043f\u0440\u043e\u0449\u0435 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c\u044e. \u041d\u0430 \u043f\u0443\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u044f \u0441\u043e\u0437\u0434\u0430\u043b \u043d\u043e\u0432\u044b\u0439 \u043a\u0440\u0435\u0439\u0442 <a href=\"https:\/\/github.com\/rust-lang\/regex\/tree\/master\/regex-automata\" rel=\"noopener noreferrer nofollow\"><code>regex-automata<\/code><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code> \u0432 \u0432\u0438\u0434\u0435 API. \u041d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u0437\u043d\u0430\u044e, \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u0434\u0430\u043b\u0435\u0435 &#8212; <strong>\u0440.\u0432.<\/strong>), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0451 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0442\u0435\u043f\u0435\u043d\u0438.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u0440\u0435\u0439\u0442\u0430, \u0438 \u043a\u0430\u043a \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u0440\u0435\u0448\u0435\u043d\u044b, \u0430 \u0442\u0430\u043a \u043f\u0443\u0442\u0435\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u043e API \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex-automata<\/code>.<\/p>\n<p><strong>\u0426\u0435\u043b\u0435\u0432\u0430\u044f \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u044f<\/strong>: \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u043d\u0430 Rust \u0438 \u0432\u0441\u0435, \u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0434\u043b\u044f \u0440.\u0432. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u044b\u0442 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0440.\u0432.<\/p>\n<p><a class=\"anchor\" name=\"brief_history\" id=\"brief_history\"><\/a><\/p>\n<h2>\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441<\/h2>\n<p>\u0412 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0435 2012, <a href=\"https:\/\/github.com\/rust-lang\/rust\/issues\/3591\" rel=\"noopener noreferrer nofollow\">\u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 Rust \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0442\u0438\u043a\u0435\u0442<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440.\u0432. \u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 Rust. \u041f\u043e\u0437\u0436\u0435 \u0413\u0440\u0435\u0439\u0434\u043e\u043d \u0425\u043e\u0430\u0440 (Graydon Hoare) <a href=\"https:\/\/github.com\/rust-lang\/rust\/issues\/3591#issuecomment-17009497\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043c\u0435\u0442\u0438\u043b\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0438<\/a>, \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u043b\u0438 RE2. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, <a href=\"https:\/\/github.com\/google\/re2\" rel=\"noopener noreferrer nofollow\">RE2<\/a> &#8212; \u044d\u0442\u043e \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442, \u0447\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u0430, \u0440\u0430\u0432\u043d\u043e\u0435 <code>O(m * n)<\/code>, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f Perl-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043a\u0430\u043a \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c. \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e RE2 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0435\u0433\u043e \u0430\u0432\u0442\u043e\u0440\u043e\u043c, \u0420\u0430\u0441\u0441\u043e\u043c \u041a\u043e\u043a\u0441\u043e\u043c (Russ Cox), \u0432 <a href=\"https:\/\/swtch.com\/~rsc\/regexp\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432. \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430<\/a>.<\/p>\n<p>\u0412 \u0430\u043f\u0440\u0435\u043b\u0435 2014, \u044f <a href=\"https:\/\/github.com\/rust-lang\/rust\/issues\/3591#issuecomment-39582811\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043c\u0435\u0442\u0438\u043b\u0441\u044f \u0432 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0438 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043d\u0430\u0434 \u0434\u0432\u0438\u0436\u043a\u043e\u043c \u0440.\u0432., \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u043c \u043a\u0440\u0435\u0439\u0442\u043e\u043c RE2<\/a>. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u041a\u043e\u043a\u0441\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0447\u0435\u0440\u0442\u0435\u0436\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440.\u0432. \u0412\u0441\u043a\u043e\u0440\u0435 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u044f <a href=\"https:\/\/github.com\/rust-lang\/rfcs\/pull\/42\" rel=\"noopener noreferrer nofollow\">\u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b RFC \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440.\u0432. \u0432 Rust Distribution<\/a>. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u0435\u0449\u0451 \u0434\u043e Rust 1.0 \u0438 \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 Cargo (\u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0430 \u043d\u0435 <a href=\"https:\/\/github.com\/rust-lang\/rust\/pull\/1149\" rel=\"noopener noreferrer nofollow\">\u043f\u0435\u0440\u0432\u043e\u0439<\/a>), \u0438 \u043f\u043e\u0434 &#171;Rust Distribution&#187; \u043f\u043e\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u044c <code>rustc<\/code>, <code>std<\/code> \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0432\u0441\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0432\u043c\u0435\u0441\u0442\u0435. \u042d\u0442\u043e\u0442 RFC \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code> \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u0442\u0438\u0445 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<\/p>\n<p>\u0414\u0435\u0441\u044f\u0442\u044c\u044e \u0434\u043d\u044f\u043c\u0438 \u043f\u043e\u0437\u0434\u043d\u0435\u0435, <a href=\"https:\/\/github.com\/rust-lang\/rfcs\/pull\/42#issuecomment-41104032\" rel=\"noopener noreferrer nofollow\">RFC \u0431\u044b\u043b \u043e\u0434\u043e\u0431\u0440\u0435\u043d<\/a>. \u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u044f <a href=\"https:\/\/github.com\/rust-lang\/rust\/pull\/13700\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043e\u0441\u043b\u0430\u043b pull request \u0432 <code>rust-lang\/rust<\/code><\/a>. \u0412\u0441\u0451 \u0431\u044b\u0441\u0442\u0440\u043e \u0437\u0430\u0432\u0435\u0440\u0442\u0435\u043b\u043e\u0441\u044c. \u041e\u0442\u043c\u0435\u0447\u0443 \u0442\u0430\u043a \u0436\u0435, \u0447\u0442\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u043d\u0430\u0437\u0432\u0430\u043b \u043a\u0440\u0435\u0439\u0442 <code>regexp<\/code>. \u0418 PR \u0432\u043a\u043b\u044e\u0447\u0430\u043b \u0432 \u0441\u0435\u0431\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0451\u0442\u0435 \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u043a \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044e \u0432 <code>regex<\/code>.<\/p>\n<p>\u0414\u0432\u0443\u043c\u044f \u0433\u043e\u0434\u0430\u043c\u0438 \u043f\u043e\u0437\u0436\u0435, \u0432 \u043c\u0430\u0435 2016, \u044f <a href=\"https:\/\/github.com\/rust-lang\/rfcs\/pull\/1620\" rel=\"noopener noreferrer nofollow\">\u043d\u0430\u043f\u0438\u0441\u0430\u043b RFC \u0441 \u0440\u0435\u043b\u0438\u0437\u043e\u043c <code>regex 1.0<\/code><\/a>. \u041e\u0434\u043e\u0431\u0440\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u044f\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432, \u043d\u043e <a href=\"https:\/\/github.com\/rust-lang\/regex\/pull\/471\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044f \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b <code>regex 1.0<\/code><\/a> \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u0441\u043f\u0443\u0441\u0442\u044f, \u0432 \u043c\u0430\u0435 2018.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0440\u0435\u043b\u0438\u0437\u043e\u043c <code>regex 1.0<\/code>, \u044f \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430\u0434 \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u0440\u0435\u0439\u0442\u0430. \u0418\u0437 <a href=\"https:\/\/github.com\/rust-lang\/regex\/commit\/715a8072890af65d2095d39f534b4b3dc4caeae2\" rel=\"noopener noreferrer nofollow\">\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0432 \u043c\u0430\u0440\u0442\u0435 2018<\/a>:<\/p>\n<blockquote>\n<p>\u041f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435 [regex-syntax] \u0434\u043e\u043b\u0436\u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0432 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u0440\u0435\u0439\u0442 regex.<\/p>\n<\/blockquote>\n<p>\u042f \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u043b, \u043a\u0443\u0434\u0430 \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u044f \u0434\u0432\u0438\u0433\u0430\u043b\u0441\u044f, \u043d\u043e \u0432 \u043c\u0430\u0440\u0442\u0435 2020 \u044f \u0432\u0441\u0435\u0440\u044c\u0451\u0437 \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0434 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f (the actual matching engines). \u0427\u0443\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u0442\u0440\u0451\u0445 \u043b\u0435\u0442 \u0441\u043f\u0443\u0441\u0442\u044f, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043a\u0440\u0435\u0439\u0442 <a href=\"https:\/\/github.com\/rust-lang\/regex\/blob\/master\/CHANGELOG.md#190-2023-07-05\" rel=\"noopener noreferrer nofollow\"><code>regex 1.9<\/code> \u0431\u044b\u043b \u0432\u044b\u043f\u0443\u0449\u0435\u043d<\/a>.<\/p>\n<p><a class=\"anchor\" name=\"problems\" id=\"problems\"><\/a><\/p>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b<\/h2>\n<p>\u0421 \u043a\u0430\u043a\u0438\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u043a\u0440\u0435\u0439\u0442 <code>regex<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u0443\u0436\u0438\u043b\u0438 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f? \u0418 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0437\u0430\u0447\u0435\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u0440\u0435\u0439\u0442\u0430?<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043c \u0434\u043b\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f.<\/p>\n<p><a class=\"anchor\" name=\"pr_composition\" id=\"pr_composition\"><\/a><\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0421\u043b\u043e\u0436\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f<\/h3>\n<p>\u0421\u043b\u0435\u0434\u0443\u044f <a href=\"https:\/\/swtch.com\/~rsc\/regexp\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438 RE2<\/a>, <code>regex<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a. \u0418\u043d\u043e\u0433\u0434\u0430 \u0441\u0440\u0430\u0437\u0443 <em>\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e<\/em> \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u043f\u043e\u0438\u0441\u043a\u0430.<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u0442\u0443\u0442 \u0434\u0432\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438, \u0447\u0430\u0441\u0442\u043e \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443: \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0411\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0442\u0430\u043a \u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0443\u043c\u0435\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u043d\u043e \u043d\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u0430 (capture group) \u0432 \u0440.\u0432.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u043b \u043a\u0440\u0435\u0439\u0442, \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e (<code>PikeVM<\/code>), \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0434\u0443\u043c\u0430\u043b \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0438\u0432\u043d\u0435\u0441\u0442\u0438 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438. \u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u043d\u043e\u0432\u044b\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0431\u044b\u043b\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b:<\/p>\n<ul>\n<li>\n<p><code>BoundedBacktracker<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a \u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u043b \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430, \u043a\u0430\u043a \u0438 <code>PikeVM<\/code>, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e \u043e\u0442\u043a\u0430\u0442\u0430 (backtracking). \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 &#8212; \u043e\u0431\u044a\u0451\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 <code>O(m * n)<\/code>. \u0422\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u0430 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440.\u0432. \u0438 \u043e\u0431\u044a\u0451\u043c\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0430 (\u0442.\u043d. haystack, \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e &#171;\u0441\u0442\u043e\u0433 \u0441\u0435\u043d\u0430&#187;, \u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e &#171;\u0441\u0442\u043e\u0433&#187; &#8212; \u043f\u0440\u0438\u043c.). \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u043e &#8212; \u044d\u0442\u0430 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c <code>PikeVM<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0413\u0438\u0431\u0440\u0438\u0434 \u0414\u041a\u0410\/\u041d\u041a\u0410 (\u0414\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u041a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0430 (DFA) \u0438 \u041d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u041a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0430 (NFA)), \u0442\u0430\u043a \u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043a\u0430\u043a \u041b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 (&#171;lazy DFA&#187;), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e, \u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f. \u041e\u043d \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0433\u0440\u0443\u043f\u043f\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043b\u043e\u0432\u0435\u0441\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f, \u0433\u0434\u0435 \u0440.\u0432. \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u044f\u0437\u044b\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439, \u0438 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: <code>foo<\/code>, <code>foo{2}<\/code>, <code>foo|bar<\/code>, <code>foo[1-3]<\/code>. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u0438\u043b\u0438 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 (multi-substring) \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432. \u0432\u043e\u043e\u0431\u0449\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>(\u041c\u044b \u0443\u0437\u043d\u0430\u0435\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0438\u043c\u0435\u044e\u0442 \u044d\u0442\u0438 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u044b \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0431\u043b\u043e\u0433\u0435)<\/p>\n<p>\u0418 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u043c\u0438 \u043f\u0440\u0438\u0448\u043b\u0430 \u0438 \u0438\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f (\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f):<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430, \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <code>PikeVM<\/code> \u0438\u043b\u0438 <code>BoundedBacktracker<\/code>, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0435\u0434\u043a\u0438\u0435, \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u043c \u043b\u0435\u043d\u0438\u0432\u044b\u043c \u0414\u041a\u0410.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0440.\u0432. \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c\u0443 \u044f\u0437\u044b\u043a\u0443, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c <em>\u043f\u0440\u0435\u0444\u0438\u043b\u044c\u0442\u0440<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0449\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f (occurrences) \u0441 \u044d\u0442\u0438\u043c \u044f\u0437\u044b\u043a\u043e\u043c. \u041a\u0430\u0436\u0434\u043e\u0435 \u0442\u0430\u043a\u043e\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 <em>\u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0443 \u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435<\/em> \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u0440.\u0432. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e <em>\u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430 \u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435<\/em> \u043c\u044b \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432., \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0438\u043b\u0438 \u043e\u043f\u0440\u043e\u0432\u0435\u0440\u0433\u043d\u0443\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043d\u0430\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>foo\\w+<\/code> \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 <code>foo<\/code> \u0432 \u0441\u0442\u043e\u0433\u0435, \u0438 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0440.\u0432. <code>foo\\w+<\/code> \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0440.\u0432. \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u043c \u043e\u0431 \u044d\u0442\u043e\u043c. \u0412 \u0438\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438 <code>foo<\/code> \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u0441\u0442\u043e\u0433\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u044f \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0435\u0449\u0451 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439, \u0442\u0430\u043a \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0438\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u043e \u0432 \u043e\u0440\u0433\u0430\u043d\u0438\u0447\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043a\u0440\u0435\u0439\u0442 \u043d\u0430\u0447\u0430\u043b \u043f\u0440\u043e\u0433\u0438\u0431\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0432\u0435\u0441\u043e\u043c. \u041f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0432\u0441\u0451 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u044f\u0432\u043b\u044f\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u041d\u0435 \u0432\u0441\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0431\u044b\u043b\u0438 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>PikeVM<\/code> \u0431\u044b\u043b\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0435\u0439 \u0438 \u0441\u0442\u0440\u0430\u0434\u0430\u043b\u0430 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043c\u043e\u0433\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043a\u043e\u043d\u0446\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u043f\u043e\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0440\u0435\u0437\u0430, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441 \u043b\u0435\u043d\u0438\u0432\u044b\u043c \u0414\u041a\u0410. \u041a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440: \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b <code>PikeVM<\/code> \u043c\u043e\u0433\u043b\u0430 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0440.\u0432. <code>\\babc\\b<\/code> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 <code>abcxyz<\/code>, \u0435\u0441\u043b\u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e 0 \u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e 3. \u041d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u0439 <code>\\b<\/code> \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u0430 <code>c<\/code> \u0441\u043b\u0435\u0434\u0443\u0435\u0442 <code>x<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0411\u044b\u043b\u043e \u0442\u0440\u0443\u0434\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a\u0443\u044e \u0438\u0437 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440.\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u043e\u0434\u0435 \u0431\u044b\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>match<\/code>, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u0440\u0430\u0441\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043a\u0440\u0435\u0439\u0442\u0430 \u043d\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u043e \u0444\u0430\u043a\u0442\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f (\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043e\u0434\u0438\u043d \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043a\u0440\u0435\u0439\u0442\u0430 <code>regex<\/code> (\u0435\u0449\u0451 \u0434\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Aho%E2%80%93Corasick_algorithm\" rel=\"noopener noreferrer nofollow\">\u0410\u0445\u043e-\u041a\u043e\u0440\u0430\u0441\u0438\u043a<\/a> \u0434\u043b\u044f \u0440.\u0432. \u0442\u0438\u043f\u0430 <code>foo1|foo2|...|fooN<\/code>, \u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u043e (it was extremenly hacky) \u0441\u0434\u0435\u043b\u0430\u043d\u043e, \u0447\u0442\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/Thompson%27s_construction\" rel=\"noopener noreferrer nofollow\">\u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 (Thompson NFA)<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439 \u043d\u0443\u0436\u0434\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438, \u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0443\u0436\u0434\u0430\u043b\u0430\u0441\u044c \u0432 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0438.<\/p>\n<p><a class=\"anchor\" name=\"pr_testing\" id=\"pr_testing\"><\/a><\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>\u0412 \u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0433\u0434\u0430 <code>regex<\/code> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u0430\u043a \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432., \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438, \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438. \u041c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432., \u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u043c \u0431\u044b\u043b\u043e \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0432\u0435\u043b\u0438 \u0441\u0435\u0431\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043d\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043e\u0431\u0449\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0432 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438. \u042d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0432\u0438\u0434\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043b\u0435\u043d\u0438\u0432\u043e\u0433\u043e \u0414\u041a\u0410 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0430 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432. \u0442\u0438\u043f\u0430 <code>PikeVM<\/code> \u0438\u043b\u0438 <code>BoundedBacktracker<\/code> \u0443\u0436\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u044f\u0432\u0438\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f \u0437\u0430\u0445\u0432\u0430\u0442\u0430. \u0427\u0442\u043e \u0436\u0435 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0414\u041a\u0410 \u043d\u0430\u0439\u0434\u0451\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 &#8212; \u043d\u0435\u0442? \u0423\u043f\u0441. \u042d\u0442\u043e \u0431\u0430\u0433.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-352745","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/352745","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=352745"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/352745\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=352745"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=352745"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=352745"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}