{"id":350653,"date":"2023-07-23T03:00:25","date_gmt":"2023-07-23T03:00:25","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=350653"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=350653","title":{"rendered":"<span>Regex engine internals as a library. Part 3<\/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<details class=\"spoiler\">\n<summary>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/748362\/##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=\"https:\/\/habr.com\/ru\/articles\/748362\/##problems\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/748362\/##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=\"https:\/\/habr.com\/ru\/articles\/748362\/##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=\"https:\/\/habr.com\/ru\/articles\/748362\/##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=\"https:\/\/habr.com\/ru\/articles\/748362\/##compiled_dfas\" 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=\"https:\/\/habr.com\/ru\/articles\/749124\/##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=\"https:\/\/habr.com\/ru\/articles\/749124\/##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=\"https:\/\/habr.com\/ru\/articles\/749124\/##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=\"https:\/\/habr.com\/ru\/articles\/749124\/##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=\"https:\/\/habr.com\/ru\/articles\/749124\/##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=\"https:\/\/habr.com\/ru\/articles\/749124\/##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=\"https:\/\/habr.com\/ru\/articles\/749730\/##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=\"https:\/\/habr.com\/ru\/articles\/749730\/##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=\"https:\/\/habr.com\/ru\/articles\/749730\/##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=\"https:\/\/habr.com\/ru\/articles\/749730\/##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=\"https:\/\/habr.com\/ru\/articles\/749730\/##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=\"https:\/\/habr.com\/ru\/articles\/749730\/##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>\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 <\/p>\n<ul>\n<li>\n<p>\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<\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0438\u0436\u043e\u043a: <code>PikeVM<\/code><\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0438\u0436\u043e\u043a: <code>BoundedBacktracker<\/code><\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0438\u0436\u043e\u043a: \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410<\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0438\u0436\u043e\u043a: \u0414\u041a\u0410<\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0438\u0436\u043e\u043a: \u0433\u0438\u0431\u0440\u0438\u0434 \u041d\u041a\u0410\/\u0414\u041a\u0410<\/p>\n<\/li>\n<li>\n<p>\u041c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041e\u0442\u043b\u0438\u0447\u0438\u044f \u043e\u0442 RE2<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438\u043d\u0433<\/p>\n<\/li>\n<li>\n<p>\u0427\u0435\u0433\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u0441\u0442\u043e\u0438\u043b\u043e<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<h2>\u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 &#8212; \u041d\u041a\u0410<\/h2>\n<p><a class=\"anchor\" name=\"#nfa_data_type\" id=\"#nfa_data_type\"><\/a><\/p>\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<\/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\u0430, \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. \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), \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<h3>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u041d\u041a\u0410<\/h3>\n<p><a class=\"anchor\" name=\"#nfa_simple_example\" id=\"#nfa_simple_example\"><\/a><\/p>\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 \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\u043e\u043c \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, \u0432 \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 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \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.<\/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<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><a class=\"anchor\" name=\"#nfa_sparse_states\" id=\"#nfa_sparse_states\"><\/a><\/p>\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, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \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\u0438\u044f \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>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \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>.<\/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 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\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). \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<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><a class=\"anchor\" name=\"#nfa_utf8_minimal\" id=\"#nfa_utf8_minimal\"><\/a><\/p>\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>PiveVM<\/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 \u0434\u0432\u0438\u0436\u043a\u0430 \u0440.\u0432. \u041b\u0435\u043d\u0438\u0432\u044b\u0439 \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? \u0411\u0430\u0439\u0442-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u041d\u041a\u0410 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0443\u0436\u043d\u043e \u0443\u043c\u0435\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 \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 points \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 points. \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\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u044d\u0442\u043e\u0433\u043e \u0437\u0430 \u0441\u0447\u0451\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f [\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0414\u0430\u0446\u0443\u043a\u0430](this link is broken) \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 \u044d\u0442\u0438\u043c \u0432\u0441\u0435\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<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\u0439 \u0434\u0435\u0440\u0435\u0432\u043e<\/h3>\n<p><a class=\"anchor\" name=\"#nfa_literal_trie\" id=\"#nfa_literal_trie\"><\/a><\/p>\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\u0435\u0431\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 <code>Split(2, 5)<\/code>, \u0447\u0442\u043e \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<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><a class=\"anchor\" name=\"#nfa_future_work\" id=\"#nfa_future_work\"><\/a><\/p>\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\u0434\u0448\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 \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<\/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\/749730\/\"> https:\/\/habr.com\/ru\/articles\/749730\/<\/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<details class=\"spoiler\">\n<summary>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/748362\/##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=\"https:\/\/habr.com\/ru\/articles\/748362\/##problems\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/748362\/##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=\"https:\/\/habr.com\/ru\/articles\/748362\/##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=\"https:\/\/habr.com\/ru\/articles\/748362\/##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=\"https:\/\/habr.com\/ru\/articles\/748362\/##compiled_dfas\" 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=\"https:\/\/habr.com\/ru\/articles\/749124\/##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=\"https:\/\/habr.com\/ru\/articles\/749124\/##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=\"https:\/\/habr.com\/ru\/articles\/749124\/##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=\"https:\/\/habr.com\/ru\/articles\/749124\/##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=\"https:\/\/habr.com\/ru\/articles\/749124\/##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=\"https:\/\/habr.com\/ru\/articles\/749124\/##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=\"https:\/\/habr.com\/ru\/articles\/749730\/##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=\"https:\/\/habr.com\/ru\/articles\/749730\/##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=\"https:\/\/habr.com\/ru\/articles\/749730\/##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=\"https:\/\/habr.com\/ru\/articles\/749730\/##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=\"https:\/\/habr.com\/ru\/articles\/749730\/##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=\"https:\/\/habr.com\/ru\/articles\/749730\/##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>\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 <\/p>\n<ul>\n<li>\n<p>\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<\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0438\u0436\u043e\u043a: <code>PikeVM<\/code><\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0438\u0436\u043e\u043a: <code>BoundedBacktracker<\/code><\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0438\u0436\u043e\u043a: \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0414\u041a\u0410<\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0438\u0436\u043e\u043a: \u0414\u041a\u0410<\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0438\u0436\u043e\u043a: \u0433\u0438\u0431\u0440\u0438\u0434 \u041d\u041a\u0410\/\u0414\u041a\u0410<\/p>\n<\/li>\n<li>\n<p>\u041c\u0435\u0442\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041e\u0442\u043b\u0438\u0447\u0438\u044f \u043e\u0442 RE2<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438\u043d\u0433<\/p>\n<\/li>\n<li>\n<p>\u0427\u0435\u0433\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u0441\u0442\u043e\u0438\u043b\u043e<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<h2>\u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 &#8212; \u041d\u041a\u0410<\/h2>\n<p><a class=\"anchor\" name=\"#nfa_data_type\" id=\"#nfa_data_type\"><\/a><\/p>\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<\/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\u0430, \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. \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), \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<h3>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u041d\u041a\u0410<\/h3>\n<p><a class=\"anchor\" name=\"#nfa_simple_example\" id=\"#nfa_simple_example\"><\/a><\/p>\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 \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\u043e\u043c \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, \u0432 \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 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \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.<\/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<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><a class=\"anchor\" name=\"#nfa_sparse_states\" id=\"#nfa_sparse_states\"><\/a><\/p>\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, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \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\u0438\u044f \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>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \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>.<\/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 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\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). \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<\/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-350653","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/350653","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=350653"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/350653\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=350653"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=350653"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=350653"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}