{"id":353126,"date":"2024-05-20T22:21:52","date_gmt":"2024-05-20T22:21:52","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=353126"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-20T22:21:52","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=353126","title":{"rendered":"<span>\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u043c<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>&#8230; \u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 Java, Perl, PHP, Python, Ruby, &#8230;<\/h2>\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=\"#intro\" rel=\"noopener noreferrer nofollow\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#re\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#fa\" rel=\"noopener noreferrer nofollow\">\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#conv\" rel=\"noopener noreferrer nofollow\">\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432 \u041d\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#search_algos\" rel=\"noopener noreferrer nofollow\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#impl\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#impl_compiling\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432 \u041d\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#impl_simulating\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f: \u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u041d\u041a\u0410<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#perf\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#caching\" rel=\"noopener noreferrer nofollow\">\u041a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u041d\u041a\u0410 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0414\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#real_regex\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#history\" rel=\"noopener noreferrer nofollow\">\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0438 \u0441\u0441\u044b\u043b\u043a\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#summary\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#ack\" rel=\"noopener noreferrer nofollow\">\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#refs\" rel=\"noopener noreferrer nofollow\">\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<hr\/>\n<p><a class=\"anchor\" name=\"intro\" id=\"intro\"><\/a><\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0451\u0442 \u043e \u0434\u0432\u0443\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u0445 \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0440.\u0432.). \u041e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u0438\u0440\u043e\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u043c \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430\u0445 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f Perl. \u0414\u0440\u0443\u0433\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u043c\u0438 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 awk \u0438 grep. \u0423 \u044d\u0442\u0438\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f <img decoding=\"async\" class=\"formula inline\" source=\"{a?}^n{a}^n\" alt=\"{a?}^n{a}^n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/68\/688\/6882e2f7cb70a27290d8de9a0a212dab.svg\" width=\"auto\" height=\"auto\"\/> \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 <img decoding=\"async\" class=\"formula inline\" source=\"a^n\" alt=\"a^n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/02\/02b\/02b39c4bea11d679ef78cad17231b4d8.svg\" width=\"auto\" height=\"auto\"\/>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dff\/c50\/f36\/dffc50f36541be004c46e6ffe1457b83.png\" alt=\"\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u043b\u044f Perl \u0441 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c\u044e\" title=\"\u0413\u0440\u0430\u0444\u0438\u043a \u0434\u043b\u044f Perl\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dff\/c50\/f36\/dffc50f36541be004c46e6ffe1457b83.png\"\/><\/p>\n<div><figcaption>\u0413\u0440\u0430\u0444\u0438\u043a \u0434\u043b\u044f Perl<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e6f\/d49\/107\/e6fd4910720ebd814392a9a570ec1fa2.png\" alt=\"\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u043b\u044f \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0441 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c\u044e\" title=\"\u0413\u0440\u0430\u0444\u0438\u043a \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e6f\/d49\/107\/e6fd4910720ebd814392a9a570ec1fa2.png\"\/><\/p>\n<div><figcaption>\u0413\u0440\u0430\u0444\u0438\u043a \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043d\u043e\u0442\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 <img decoding=\"async\" class=\"formula inline\" source=\"{a?}^3{a}^3\" alt=\"{a?}^3{a}^3\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/36\/36d\/36d70c86154eb9166ad4ff0d1a9cde7a.svg\" width=\"auto\" height=\"auto\"\/> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f <img decoding=\"async\" class=\"formula inline\" source=\"a?a?a?aaa\" alt=\"a?a?a?aaa\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f3\/f3a\/f3a7f6f12654ef29d8a79b46a85b10f9.svg\" width=\"auto\" height=\"auto\"\/>. \u041d\u0430 \u043e\u0431\u043e\u0438\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043e \u0432\u0440\u0435\u043c\u044f, \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0435 \u043a\u0430\u0436\u0434\u044b\u043c \u0438\u0437 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432, \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e <img decoding=\"async\" class=\"formula inline\" source=\"a?^na^n\" alt=\"a?^na^n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e0\/e02\/e0242f3965e16ceba8f6857a2f386e13.svg\" width=\"auto\" height=\"auto\"\/> \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"a^n\" alt=\"a^n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/02\/02b\/02b39c4bea11d679ef78cad17231b4d8.svg\" width=\"auto\" height=\"auto\"\/>.<\/p>\n<p>\u041e\u0442\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e Perl \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 60 \u0441\u0435\u043a\u0443\u043d\u0434 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c 29-\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043a &#171;\u041d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0410\u0432\u0442\u043e\u043c\u0430\u0442 (\u041d\u041a\u0410) \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430&#187; \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u044b \u043f\u043e\u0437\u0436\u0435, \u0442\u0440\u0435\u0431\u0443\u0435\u0442 20 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434 \u0434\u043b\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438. \u0418 \u044d\u0442\u043e \u043d\u0435 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430. \u0412 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0434\u043b\u044f Perl \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445, \u0430 \u0432 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0434\u043b\u044f \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 &#8212; \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445: \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0432 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0440\u0430\u0437 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c Perl \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u043e\u0439 29-\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435. \u042d\u0442\u0430 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u043f\u0440\u043e\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430: \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 200-\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043c\u0435\u043d\u0435\u0435, \u0447\u0435\u043c \u0437\u0430 200 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f,  \u043a\u0430\u043a Perl&#8217;\u0443 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0431\u044b \u0431\u043e\u043b\u0435\u0435 1015 \u043b\u0435\u0442. (Perl &#8212; \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u043e\u0442 \u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c; \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0432\u044b\u0448\u0435 \u043c\u043e\u0433 \u0431\u044b\u0442\u044c \u0438 Python \u0438\u043b\u0438 PHP, \u0438\u043b\u0438 Ruby, \u0438\u043b\u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u044f\u0437\u044b\u043a\u0438. \u0411\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a, \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0434\u0430\u043b\u0435\u0435, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439.)<\/p>\n<p>\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e \u043f\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c: \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 Perl \u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439. \u041f\u043e \u0444\u0430\u043a\u0442\u0443, \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0440.\u0432. \u0432 Perl \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u0439. \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0433\u0440\u0430\u0444\u0438\u043a, \u0432 Perl \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0442.\u043d. &#171;\u043f\u0430\u0442\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435&#187; \u0440.\u0432., \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c-\u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u043d\u0435\u0442 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0431\u044b \u043f\u0430\u0442\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438. \u041f\u0440\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441: \u043f\u043e\u0447\u0435\u043c\u0443 Perl \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430? \u0410 \u0432\u0435\u0434\u044c \u043c\u043e\u0436\u0435\u0442, \u0438 \u0435\u043c\u0443 \u0431\u044b \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0440.\u0432. \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0442\u0435\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c. \u0420.\u0432. \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u043d\u043e \u041a\u0435\u043d \u0422\u043e\u043c\u043f\u0441\u043e\u043d (Ken Thompson) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b \u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c \u0432 \u0432\u0438\u0434\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 QED \u0434\u043b\u044f \u041e\u0421 CTSS. \u0414\u0435\u043d\u0438\u0441 \u0420\u0438\u0442\u0447\u0438 (Dennis Ritchie) \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0432 \u0441\u0432\u043e\u0435\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 QED \u0434\u043b\u044f GE-TSS. \u0422\u043e\u043c\u043f\u0441\u043e\u043d \u0438 \u0420\u0438\u0442\u0447\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c Unix, \u0438 \u0432\u0437\u044f\u043b\u0438 \u0440.\u0432. \u0441 \u0441\u043e\u0431\u043e\u0439. \u041a \u043f\u043e\u0437\u0434\u043d\u0438\u043c 70\u044b\u043c, \u0440.\u0432. \u0431\u044b\u043b\u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0435 Unix, \u0432 \u0442\u0430\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445, \u043a\u0430\u043a ed, grep, egrep, awk \u0438 lex.<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0438 \u0434\u043d\u0438 \u0440.\u0432. \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0442\u0435\u043e\u0440\u0438\u0438 \u0432\u0435\u0434\u0451\u0442 \u043a \u043f\u043b\u043e\u0445\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440.\u0432., \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0432 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445, \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0442\u0435\u0445, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445 Unix \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u0438\u043b\u0435\u0442\u043d\u0435\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0431\u0437\u043e\u0440 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0442\u0435\u043e\u0440\u0438\u0438: \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u044b \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0440.\u0432., \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0451\u043d\u043d\u044b\u0439 \u041a\u0435\u043d\u043e\u043c \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u043e\u043c \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 60\u0445. \u0422\u0430\u043a\u0436\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c \u0442\u0435\u043e\u0440\u0438\u044e \u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430. \u042d\u0442\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u0432 400 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u043d\u0430 \u0421\u0438, \u0431\u0435\u0436\u0438\u0442 \u0433\u043e\u043b\u043e\u0432\u0430 \u043a \u0433\u043e\u043b\u043e\u0432\u0435 \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 Perl. \u041e\u043d\u0430 \u043e\u0431\u0433\u043e\u043d\u044f\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 Perl&#8217;\u043e\u043c, Python&#8217;\u043e\u043c, PCRE \u0438 \u043f\u0440\u043e\u0447\u0438\u043c\u0438. \u0421\u0442\u0430\u0442\u044c\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0442\u0435\u043e\u0440\u0438\u044f \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0430 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435.<\/p>\n<p><a class=\"anchor\" name=\"re\" id=\"re\"><\/a><\/p>\n<h2>\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f &#8212; \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043d\u043e\u0442\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a. \u041a\u043e\u0433\u0434\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0434\u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u043e\u0434 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0440.\u0432., \u043c\u044b \u0447\u0430\u0441\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 (\u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f) \u0441 \u0440.\u0432.<\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0435 \u0440.\u0432. &#8212; \u044d\u0442\u043e \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b. \u0417\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u0430\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 <img decoding=\"async\" class=\"formula inline\" source=\"*\" alt=\"*\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/33\/338\/3389dae361af79b04c9c8e7057f60cc6.svg\" width=\"auto\" height=\"auto\"\/>, <img decoding=\"async\" class=\"formula inline\" source=\"+\" alt=\"+\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/26b\/26b17225b626fb9238849fd60eabdf60.svg\" width=\"auto\" height=\"auto\"\/>, <img decoding=\"async\" class=\"formula inline\" source=\"?\" alt=\"?\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d1\/d14\/d1457b72c3fb323a2671125aef3eab5d.svg\" width=\"auto\" height=\"auto\"\/>, <img decoding=\"async\" class=\"formula inline\" source=\"(\" alt=\"(\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/84\/84c\/84c40473414caf2ed4a7b1283e48bbf4.svg\" width=\"auto\" height=\"auto\"\/>, <img decoding=\"async\" class=\"formula inline\" source=\")\" alt=\")\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/93\/937\/9371d7a2e3ae86a00aab4771e39d255d.svg\" width=\"auto\" height=\"auto\"\/>, <img decoding=\"async\" class=\"formula inline\" source=\"|\" alt=\"|\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b9\/b99\/b99834bc19bbad24580b3adfa04fb947.svg\" width=\"auto\" height=\"auto\"\/>, \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u0441\u0430\u043c\u0438 \u0441\u043e\u0431\u043e\u0439. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u0430\u0441\u0438\u043c\u0432\u043e\u043b, \u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u043a\u043e\u0441\u043e\u0439 \u0447\u0435\u0440\u0442\u043e\u0439 (backslash): <img decoding=\"async\" class=\"formula inline\" source=\"\\+\" alt=\"\\+\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/80\/80c\/80cb47d0390f3514a6270ab71e4aad70.svg\" width=\"auto\" height=\"auto\"\/> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c &#171;\u043f\u043b\u044e\u0441&#187;.<\/p>\n<p>\u0414\u0432\u0430 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0447\u0435\u0440\u0435\u0437 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0418 (<em>\u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f<\/em>) \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0418\u041b\u0418 (<em>\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b<\/em>, <em>\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0432\u044b\u0431\u043e\u0440\u0430<\/em>) \u0432 \u0432\u0438\u0434\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f: \u0435\u0441\u043b\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"e_1\" alt=\"e_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/31\/310\/3104bcc503b3b8c16ffa2940b56aaf1c.svg\" width=\"auto\" height=\"auto\"\/> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>s<\/code>, \u0430 <img decoding=\"async\" class=\"formula inline\" source=\"e_2\" alt=\"e_2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/54\/544\/54439c342588ca6494c7e821337dda53.svg\" width=\"auto\" height=\"auto\"\/> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>t<\/code>, \u0442\u043e\u0433\u0434\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"e_1|e_2\" alt=\"e_1|e_2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/33\/33a\/33a9e793d1277de8051f2b78e0882b57.svg\" width=\"auto\" height=\"auto\"\/> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>s<\/code> \u0438\u043b\u0438 \u0441 <code>t<\/code>, \u0430 <img decoding=\"async\" class=\"formula inline\" source=\"e_1 e_2\" alt=\"e_1 e_2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a1\/a1f\/a1f8af39c9276dd0d007f8a1cd85932f.svg\" width=\"auto\" height=\"auto\"\/> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>st<\/code>.<\/p>\n<p>\u041c\u0435\u0442\u0430\u0441\u0438\u043c\u0432\u043e\u043b\u044b <img decoding=\"async\" class=\"formula inline\" source=\"*\" alt=\"*\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/33\/338\/3389dae361af79b04c9c8e7057f60cc6.svg\" width=\"auto\" height=\"auto\"\/>, <img decoding=\"async\" class=\"formula inline\" source=\"+\" alt=\"+\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/26b\/26b17225b626fb9238849fd60eabdf60.svg\" width=\"auto\" height=\"auto\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"?\" alt=\"?\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d1\/d14\/d1457b72c3fb323a2671125aef3eab5d.svg\" width=\"auto\" height=\"auto\"\/> \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439: <img decoding=\"async\" class=\"formula inline\" source=\"e_1*\" alt=\"e_1*\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/81\/811\/8115190e1db372fad6315dbd055e1fba.svg\" width=\"auto\" height=\"auto\"\/> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437 \u043d\u0443\u043b\u044f \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u043a, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <img decoding=\"async\" class=\"formula inline\" source=\"e_1\" alt=\"e_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/31\/310\/3104bcc503b3b8c16ffa2940b56aaf1c.svg\" width=\"auto\" height=\"auto\"\/>; <img decoding=\"async\" class=\"formula inline\" source=\"e_1+\" alt=\"e_1+\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/67\/675\/675163bb7305a10ec3205af882ebc7a5.svg\" width=\"auto\" height=\"auto\"\/> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438; <img decoding=\"async\" class=\"formula inline\" source=\"e_1?\" alt=\"e_1?\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/86a\/86a2a1955b7f218cb65e4bd8ba4199ac.svg\" width=\"auto\" height=\"auto\"\/> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043d\u0443\u043b\u0451\u043c \u0438\u043b\u0438 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438.<\/p>\n<p>\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u043e\u0442 \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u043c\u0443 \u043a \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u043c\u0443: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430, \u043f\u043e\u0442\u043e\u043c \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f, \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f. \u042f\u0432\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430, \u043a\u0430\u043a \u0432 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432: <img decoding=\"async\" class=\"formula inline\" source=\"ab|cd\" alt=\"ab|cd\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c6\/c6b\/c6b47c88a1489d5fe07b87e5870b4ac1.svg\" width=\"auto\" height=\"auto\"\/> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043e\u043c <img decoding=\"async\" class=\"formula inline\" source=\"(ab)|(cd)\" alt=\"(ab)|(cd)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/fe\/fef\/fefd73d6f253fe634df1a9ff8e88cea5.svg\" width=\"auto\" height=\"auto\"\/>; \u0430 <img decoding=\"async\" class=\"formula inline\" source=\"ab*\" alt=\"ab*\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/24\/249\/2498f8a7fa0d13d9fae72c9d4bfd64de.svg\" width=\"auto\" height=\"auto\"\/> &#8212; <img decoding=\"async\" class=\"formula inline\" source=\"a(b*)\" alt=\"a(b*)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b2\/7b2dc651bf20d405e532a622883f9688.svg\" width=\"auto\" height=\"auto\"\/>.<\/p>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0440.\u0432. \u0432 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0439 Unix \u0443\u0442\u0438\u043b\u0438\u0442\u0435 egrep. \u042d\u0442\u043e \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u043c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438. \u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u044f\u0437\u044b\u043a &#8212; \u044d\u0442\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u043a\u0441\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u043f\u0430\u043c\u044f\u0442\u0438. \u0411\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u043e\u0442\u043c\u0435\u0442\u0438\u043c Perl \u0438 \u0442\u0435\u0445, \u043a\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043e) \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 <a href=\"http:\/\/www.perl.com\/doc\/manual\/html\/pod\/perlre.html\" rel=\"noopener noreferrer nofollow\">\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0438 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439<\/a>. \u042d\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0440.\u0432. \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c\u0438 \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u0442\u0440\u0443\u0434\u043d\u043e \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c\u0438, \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438: \u044d\u0442\u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u043d\u043e\u0432\u044b\u0435 \u0440.\u0432. \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u044e\u0442 \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u0432 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0435.<\/p>\n<p>\u041e\u0434\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <em>\u043e\u0431\u0440\u0430\u0442\u043d\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438<\/em> (<em>backreferences<\/em>). \u041e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a <img decoding=\"async\" class=\"formula inline\" source=\"\\1\" alt=\"\\1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b5\/b51\/b5101eb6e685091719013d1a75756a53.svg\" width=\"auto\" height=\"auto\"\/> \u0438\u043b\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"\\2\" alt=\"\\2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0b\/0bf\/0bfe47819da04212a33dac83b71430e8.svg\" width=\"auto\" height=\"auto\"\/> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043d\u0438\u043c: <img decoding=\"async\" class=\"formula inline\" source=\"(cat|dog)\\1\" alt=\"(cat|dog)\\1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6c\/6cd\/6cd2a4aa1a18b26facdb2d55ec5b48e4.svg\" width=\"auto\" height=\"auto\"\/> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>catcat<\/code> \u0438 <code>dogdog<\/code>, \u043d\u043e \u043d\u0435 \u0441 <code>catdog<\/code> \u0438\u043b\u0438 <code>dogcat<\/code>. \u0427\u0442\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u0442\u043e \u0440.\u0432. \u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0440.\u0432. \u0417\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043e\u0440\u043e\u0433\u043e \u043f\u043b\u0430\u0442\u0438\u0442\u044c: \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0441 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0442\u0435\u043c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 Perl. Perl (\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u044f\u0437\u044b\u043a\u0438) \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0443\u0436\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0440.\u0432., \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0432\u044b\u0448\u0435, \u043d\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u043e\u0431 \u044d\u0442\u0438\u0445 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445.<\/p>\n<p><a class=\"anchor\" name=\"fa\" id=\"fa\"><\/a><\/p>\n<h2>\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442<\/h2>\n<p>\u0414\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u0432. \u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 (finite automata), \u0442\u0430\u043a \u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043a\u0430\u043a \u043c\u0430\u0448\u0438\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 (state machine), \u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d\u044b &#171;\u0430\u0432\u0442\u043e\u043c\u0430\u0442&#187; \u0438 &#171;\u043c\u0430\u0448\u0438\u043d\u0430&#187;, \u043a\u0430\u043a \u0432\u0437\u0430\u0438\u043c\u043e\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435. (\u041f\u0440\u0438\u043c: \u0432 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 &#171;\u043c\u0430\u0448\u0438\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439&#187; \u0440\u0435\u0434\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u043e\u0432\u043e &#171;\u0430\u0432\u0442\u043e\u043c\u0430\u0442&#187;, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f &#171;\u0414\u041a\u0410&#187; (\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442, \u0430\u043d\u0433\u043b. DFA) \u0438 &#171;\u041d\u041a\u0410&#187; (\u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442, \u0430\u043d\u0433\u043b. NFA))<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u044e\u0449\u0438\u0439 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0440.\u0432. <img decoding=\"async\" class=\"formula inline\" source=\"a(bb)+a\" alt=\"a(bb)+a\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/1a\/1ab\/1ab9a811fbd065195ac8367c672da809.svg\" width=\"auto\" height=\"auto\"\/>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9a2\/9e8\/91c\/9a29e891cba3f0b0b4376705801e3676.png\" alt=\"\u0414\u041a\u0410 \u0434\u043b\u044f a(bb)+a\" title=\"\u0414\u041a\u0410 \u0434\u043b\u044f a(bb)+a\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9a2\/9e8\/91c\/9a29e891cba3f0b0b4376705801e3676.png\"\/><\/p>\n<div><figcaption>\u0414\u041a\u0410 \u0434\u043b\u044f a(bb)+a<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0441\u0432\u043e\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0451\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438. (\u0427\u0438\u0441\u043b\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 &#8212; \u044d\u0442\u043e \u043c\u0435\u0442\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0449\u0435; \u043e\u043d\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430.) \u041f\u043e \u043c\u0435\u0440\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0423 \u044d\u0442\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0434\u0432\u0430 \u043e\u0441\u043e\u0431\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f: \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (start state) <img decoding=\"async\" class=\"formula inline\" source=\"S_{0}\" alt=\"S_{0}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/18\/18c\/18c5f9700e93ac23c1ca12fe82793464.svg\" width=\"auto\" height=\"auto\"\/>, \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f (match state) <img decoding=\"async\" class=\"formula inline\" source=\"S_{4}\" alt=\"S_{4}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/2f\/2f8\/2f86803c1a5c270da025ca9f943196e9.svg\" width=\"auto\" height=\"auto\"\/>. \u041d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 (\u0432\u0435\u0434\u0443\u0449\u0438\u0435 \u0438\u0437 \u043d\u0438\u043e\u0442\u043a\u0443\u0434\u0430), \u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u043e\u0439\u043d\u044b\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438.<\/p>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0443 \u0437\u0430 \u0440\u0430\u0437. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>abbbba<\/code>. \u041a\u043e\u0433\u0434\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u0443\u044e \u0431\u0443\u043a\u0432\u0443 \u0441\u0442\u0440\u043e\u043a\u0438 (<code>a<\/code>), \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"S_{0}\" alt=\"S_{0}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/18\/18c\/18c5f9700e93ac23c1ca12fe82793464.svg\" width=\"auto\" height=\"auto\"\/>. \u041e\u043d \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u0435 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"S_{1}\" alt=\"S_{1}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8d\/8dc\/8dc4eef060814e559aff4c5fac3f51fe.svg\" width=\"auto\" height=\"auto\"\/>. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0441\u0442\u0440\u043e\u043a\u0438: \u0447\u0438\u0442\u0430\u044f \u0441\u0438\u043c\u0432\u043e\u043b <code>b<\/code> \u043e\u043d \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"S_{2}\" alt=\"S_{2}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/97\/97a\/97a6ae0695c4b2723ff5c8bccdb1e735.svg\" width=\"auto\" height=\"auto\"\/>, <code>b<\/code> &#8212; <img decoding=\"async\" class=\"formula inline\" source=\"S_{3}\" alt=\"S_{3}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ef\/eff\/eff9b86742e85cfc8d927f72f872442d.svg\" width=\"auto\" height=\"auto\"\/>, \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 <code>b<\/code> &#8212; \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 <img decoding=\"async\" class=\"formula inline\" source=\"S_{2}\" alt=\"S_{2}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/97\/97a\/97a6ae0695c4b2723ff5c8bccdb1e735.svg\" width=\"auto\" height=\"auto\"\/>, \u043f\u043e\u0442\u043e\u043c \u043f\u043e <code>b<\/code> \u0441\u043d\u043e\u0432\u0430 \u0432 <img decoding=\"async\" class=\"formula inline\" source=\"S_{3}\" alt=\"S_{3}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ef\/eff\/eff9b86742e85cfc8d927f72f872442d.svg\" width=\"auto\" height=\"auto\"\/>, \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u0430\u043a\u0438 \u0447\u0438\u0442\u0430\u044f <code>a<\/code> \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 <img decoding=\"async\" class=\"formula inline\" source=\"S_{4}\" alt=\"S_{4}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/2f\/2f8\/2f86803c1a5c270da025ca9f943196e9.svg\" width=\"auto\" height=\"auto\"\/>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/afa\/2b2\/fc0\/afa2b2fc02842aba25b3a99336dd5f2e.png\" alt=\"\u0420\u0430\u0431\u043e\u0442\u0430 \u0414\u041a\u0410 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 abbbba\" title=\"\u0420\u0430\u0431\u043e\u0442\u0430 \u0414\u041a\u0410 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 abbbba\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/afa\/2b2\/fc0\/afa2b2fc02842aba25b3a99336dd5f2e.png\"\/><\/p>\n<div><figcaption>\u0420\u0430\u0431\u043e\u0442\u0430 \u0414\u041a\u0410 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 abbbba<\/figcaption><\/div>\n<\/figure>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"S_{4}\" alt=\"S_{4}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/2f\/2f8\/2f86803c1a5c270da025ca9f943196e9.svg\" width=\"auto\" height=\"auto\"\/>, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u043d \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 (\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442) \u0441\u0442\u0440\u043e\u043a\u0443. \u0415\u0441\u043b\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0442\u043e \u043e\u043d \u043d\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 (\u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442) \u0441\u0442\u0440\u043e\u043a\u0443. \u0415\u0441\u043b\u0438 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u0443, \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u043f\u0440\u0435\u0436\u0434\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <em>\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c<\/em> (<em>\u0414\u041a\u0410<\/em>, \u0430\u043d\u0433\u043b. <em>Deterministic Finite Automata<\/em>, <em>DFA<\/em>), \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0432\u0435\u0434\u0451\u0442 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435, \u0447\u0435\u043c \u0432 \u043e\u0434\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e, \u043d\u043e \u0443\u0436\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/133\/d01\/6e8\/133d016e80857d79de4377d4cedf96d5.png\" alt=\"\u041d\u041a\u0410 \u0434\u043b\u044f a(bb)+a\" title=\"\u041d\u041a\u0410 \u0434\u043b\u044f a(bb)+a\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/133\/d01\/6e8\/133d016e80857d79de4377d4cedf96d5.png\"\/><\/p>\n<div><figcaption>\u041d\u041a\u0410 \u0434\u043b\u044f a(bb)+a<\/figcaption><\/div>\n<\/figure>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043e\u043d \u0447\u0438\u0442\u0430\u0435\u0442 <code>b<\/code>, \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"S_{2}\" alt=\"S_{2}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/97\/97a\/97a6ae0695c4b2723ff5c8bccdb1e735.svg\" width=\"auto\" height=\"auto\"\/>, \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f: \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0432 <img decoding=\"async\" class=\"formula inline\" source=\"S_{1}\" alt=\"S_{1}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8d\/8dc\/8dc4eef060814e559aff4c5fac3f51fe.svg\" width=\"auto\" height=\"auto\"\/> \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c <code>bb<\/code>, \u0438\u043b\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 <img decoding=\"async\" class=\"formula inline\" source=\"S_{3}\" alt=\"S_{3}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ef\/eff\/eff9b86742e85cfc8d927f72f872442d.svg\" width=\"auto\" height=\"auto\"\/> \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0435\u0435 <code>a<\/code>. \u0422\u0430\u043a \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432\u043f\u0435\u0440\u0451\u0434, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0441\u0442\u0440\u043e\u043a\u0438, \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0435 \u0438\u0437 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u043d\u044b\u043c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0443 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u0442\u044c. \u0422\u0430\u043a\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f <em>\u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430\u043c\u0438<\/em> (<em>\u041d\u041a\u0410<\/em>, <em>\u041d\u0414\u041a\u0410<\/em>, <em>NFA<\/em> \u0438\u043b\u0438 <em>NDFA<\/em>). \u041d\u041a\u0410 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442 \u0432\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0435\u0441\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0451 \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u041d\u041a\u0410 \u0438\u043c\u0435\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0431\u0435\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u041c\u044b \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0430\u043a\u0438\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0431\u0435\u0437 \u043c\u0435\u0442\u043e\u043a (\u043f\u0440\u0438\u043c: \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u0432 \u0442\u0430\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f <em>\u044d\u043f\u0441\u0438\u043b\u043e\u043d<\/em>-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u043c\u0438 \u0438 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0431\u0443\u043a\u0432\u043e\u0439 <img decoding=\"async\" class=\"formula inline\" source=\"\\epsilon\" alt=\"\\epsilon\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92e4da341fe8f4cd46192f21b6ff3aa7.svg\" width=\"auto\" height=\"auto\"\/>). \u041d\u041a\u0410 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u0435 \u0431\u0435\u0437 \u0441\u0438\u043c\u0432\u043e\u043b\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0447\u0438\u0442\u0430\u044f \u0441\u0438\u043c\u0432\u043e\u043b \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u042d\u0442\u043e\u0442 \u041d\u041a\u0410 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u0434\u0432\u0443\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c, \u043d\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u0430 \u0431\u0435\u0437 \u043c\u0435\u0442\u043a\u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e <img decoding=\"async\" class=\"formula inline\" source=\"a(bb)+a\" alt=\"a(bb)+a\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/1a\/1ab\/1ab9a811fbd065195ac8367c672da809.svg\" width=\"auto\" height=\"auto\"\/> \u0431\u043e\u043b\u0435\u0435 \u044f\u0432\u043d\u044b\u043c:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c3a\/13c\/3a9\/c3a13c3a974a0bf51e6f8f8ce5280a52.png\" alt=\"\u0414\u0440\u0443\u0433\u043e\u0439 \u041d\u041a\u0410 \u0434\u043b\u044f a(bb)+a\" title=\"\u0414\u0440\u0443\u0433\u043e\u0439 \u041d\u041a\u0410 \u0434\u043b\u044f a(bb)+a\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c3a\/13c\/3a9\/c3a13c3a974a0bf51e6f8f8ce5280a52.png\"\/><\/p>\n<div><figcaption>\u0414\u0440\u0443\u0433\u043e\u0439 \u041d\u041a\u0410 \u0434\u043b\u044f a(bb)+a<\/figcaption><\/div>\n<\/figure>\n<p><a class=\"anchor\" name=\"conv\" id=\"conv\"><\/a><\/p>\n<h2>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432 \u041d\u041a\u0410<\/h2>\n<p>\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u041d\u041a\u0410 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b: \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440.\u0432. \u0435\u0441\u0442\u044c \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0439 \u041d\u041a\u0410 (\u043e\u043d\u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0438) \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. (\u0422\u0430\u043a \u0436\u0435 \u0414\u041a\u0410 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b \u041d\u041a\u0410 \u0438 \u0440.\u0432. \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c; \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u043d\u043e \u043f\u043e\u0437\u0434\u043d\u0435\u0435.) \u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0440.\u0432. \u0432 \u041d\u041a\u0410. \u041e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0437\u0434\u0435\u0441\u044c \u043c\u0435\u0442\u043e\u0434 \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u0431\u044b\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0432 1968.<\/p>\n<p>\u041d\u041a\u0410 \u0434\u043b\u044f \u0440.\u0432. \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0438\u0437 \u0447\u0430\u0441\u0442\u0435\u0439 \u041d\u041a\u0410, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e, \u0438 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0427\u0430\u0441\u0442\u0438 \u041d\u041a\u0410 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f: \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0443 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u0435\u043b\u043e\u043a, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0432 \u043d\u0438\u043a\u0443\u0434\u0430. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u0430\u043f\u043e\u043c \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u0435\u043b\u043e\u043a  \u043a \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041d\u041a\u0410 \u0434\u043b\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/828\/3f8\/f78\/8283f8f78075e71b1148a67905b8cc6d.png\" alt=\"\u041d\u041a\u0410 \u0434\u043b\u044f \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430\" title=\"\u041d\u041a\u0410 \u0434\u043b\u044f \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/828\/3f8\/f78\/8283f8f78075e71b1148a67905b8cc6d.png\"\/><\/p>\n<div><figcaption>\u041d\u041a\u0410 \u0434\u043b\u044f \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u041a\u0410 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <img decoding=\"async\" class=\"formula inline\" source=\"e_{1}e_{2}\" alt=\"e_{1}e_{2}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/14\/14d\/14d399e869e0bf10d4bb04b3bb28bbd9.svg\" width=\"auto\" height=\"auto\"\/> \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"e_{1}\" alt=\"e_{1}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/86f\/86f10061ad00479d981deb7c738917cb.svg\" width=\"auto\" height=\"auto\"\/> \u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"e_{2}\" alt=\"e_{2}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/78\/783\/7838b605a6d7dc2dffa546f485b40fa0.svg\" width=\"auto\" height=\"auto\"\/>:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/92d\/ffd\/515\/92dffd5151281d1f48e215058bef1d36.png\" alt=\"\u041d\u041a\u0410 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438\" title=\"\u041d\u041a\u0410 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/92d\/ffd\/515\/92dffd5151281d1f48e215058bef1d36.png\"\/><\/p>\n<div><figcaption>\u041d\u041a\u0410 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u041a\u0410 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043e\u0439 <img decoding=\"async\" class=\"formula inline\" source=\"e_1|e_2\" alt=\"e_1|e_2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/33\/33a\/33a9e793d1277de8051f2b78e0882b57.svg\" width=\"auto\" height=\"auto\"\/> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u0431\u043e\u0440 \u043b\u0438\u0431\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"e_1\" alt=\"e_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/31\/310\/3104bcc503b3b8c16ffa2940b56aaf1c.svg\" width=\"auto\" height=\"auto\"\/>, \u043b\u0438\u0431\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"e_2\" alt=\"e_2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/54\/544\/54439c342588ca6494c7e821337dda53.svg\" width=\"auto\" height=\"auto\"\/>:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/73a\/2b4\/70b\/73a2b470bb8f87843982b09964d3a4ef.png\" alt=\"\u041d\u041a\u0410 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0431\u043e\u0440\u0430\" title=\"\u041d\u041a\u0410 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0431\u043e\u0440\u0430\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/73a\/2b4\/70b\/73a2b470bb8f87843982b09964d3a4ef.png\"\/><\/p>\n<div><figcaption>\u041d\u041a\u0410 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0431\u043e\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u041a\u0410 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <img decoding=\"async\" class=\"formula inline\" source=\"e?\" alt=\"e?\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/dd\/dd1\/dd134e18e71a28faada0ad97eeddc931.svg\" width=\"auto\" height=\"auto\"\/> \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u043f\u0443\u0441\u0442\u043e\u0439 \u043f\u0443\u0442\u044c (\u0442.\u043d. <img decoding=\"async\" class=\"formula inline\" source=\"\\epsion\" alt=\"\\epsion\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/97\/97e\/97e5f3614ece50ba3cc3dcd57807e27e.svg\" width=\"auto\" height=\"auto\"\/>-\u043f\u0435\u0440\u0435\u0445\u043e\u0434):<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/343\/b8c\/1ab\/343b8c1ab36972fd034856b8c122c8e5.png\" alt=\"\u041d\u041a\u0410 \u0434\u043b\u044f \u043d\u0443\u043b\u044f \u0438\u043b\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0430\" title=\"\u041d\u041a\u0410 \u0434\u043b\u044f \u043d\u0443\u043b\u044f \u0438\u043b\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0430\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/343\/b8c\/1ab\/343b8c1ab36972fd034856b8c122c8e5.png\"\/><\/p>\n<div><figcaption>\u041d\u041a\u0410 \u0434\u043b\u044f \u043d\u0443\u043b\u044f \u0438\u043b\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u041a\u0410 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <img decoding=\"async\" class=\"formula inline\" source=\"e*\" alt=\"e*\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c8\/c80\/c80f28ad3237ce8a87188e49f9b66883.svg\" width=\"auto\" height=\"auto\"\/> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043d\u043e \u0437\u0430\u043c\u044b\u043a\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"e\" alt=\"e\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e1\/e16\/e1671797c52e15f763380b45e841ec32.svg\" width=\"auto\" height=\"auto\"\/> \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/522\/104\/d84\/522104d846ae58510b48584c2bf3041c.png\" alt=\"\u041d\u041a\u0410 \u0434\u043b\u044f \u043d\u0443\u043b\u044f \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432\" title=\"\u041d\u041a\u0410 \u0434\u043b\u044f \u043d\u0443\u043b\u044f \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/522\/104\/d84\/522104d846ae58510b48584c2bf3041c.png\"\/><\/p>\n<div><figcaption>\u041d\u041a\u0410 \u0434\u043b\u044f \u043d\u0443\u043b\u044f \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u041a\u0410 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <img decoding=\"async\" class=\"formula inline\" source=\"e+\" alt=\"e+\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/21\/219\/2199d0d21bdad1e76af41a4a802cbb00.svg\" width=\"auto\" height=\"auto\"\/> \u0442\u0430\u043a \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0435\u0442\u043b\u044e, \u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 <img decoding=\"async\" class=\"formula inline\" source=\"e\" alt=\"e\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e1\/e16\/e1671797c52e15f763380b45e841ec32.svg\" width=\"auto\" height=\"auto\"\/> \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0430:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/aba\/d56\/466\/abad5646611bff4af9d530c530053ff3.png\" alt=\"\u041d\u041a\u0410 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432\" title=\"\u041d\u041a\u0410 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/aba\/d56\/466\/abad5646611bff4af9d530c530053ff3.png\"\/><\/p>\n<div><figcaption>\u041d\u041a\u0410 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043d\u043e\u0432\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430\u0445, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0430 \u043e\u0434\u0438\u043d \u0441\u0438\u043c\u0432\u043e\u043b \u0438\u043b\u0438 \u043c\u0435\u0442\u0430\u0441\u0438\u043c\u0432\u043e\u043b \u0432 \u0440.\u0432., \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u043a\u043e\u0431\u043e\u043a. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u041d\u041a\u0410 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e \u0441\u0430\u043c\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0434\u043b\u0438\u043d\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440.\u0432.<\/p>\n<p>\u041a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u043c\u044b\u043c \u0432\u044b\u0448\u0435 \u041d\u041a\u0410, \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0431\u0435\u0437 \u043c\u0435\u0442\u043e\u043a \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u041d\u041a\u0410 \u0441\u0440\u0430\u0437\u0443 \u0431\u0435\u0437 \u043d\u0438\u0445. \u041d\u041a\u0410 \u0441 \u043d\u0435\u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0449\u0435 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0449\u0435 \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0421\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u044b \u044d\u0442\u0438 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u043c.<\/p>\n<p><a class=\"anchor\" name=\"search_algos\" id=\"search_algos\"><\/a><\/p>\n<h2>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440.\u0432. \u0438 \u0441\u0442\u0440\u043e\u043a\u0438: \u0441\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440.\u0432. \u0432 \u041d\u041a\u0410 \u0438 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u041d\u041a\u0410 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0430\u044e\u0442 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0431\u043e\u0440\u043e\u043c: \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u041d\u041a\u0410 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0439\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>\u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0431\u043e\u0440\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442, \u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u041d\u041a\u0410 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <img decoding=\"async\" class=\"formula inline\" source=\"abab|abbb\" alt=\"abab|abbb\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/88\/88c\/88c4c620286cf3e86b90c0c22aaeb16d.svg\" width=\"auto\" height=\"auto\"\/> \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 <code>abbb<\/code>:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9b9\/4c5\/701\/9b94c5701afcbe12c870811771154966.png\" alt=\"\u041d\u041a\u0410 \u0434\u043b\u044f abab|abbb\" title=\"\u041d\u041a\u0410 \u0434\u043b\u044f abab|abbb\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9b9\/4c5\/701\/9b94c5701afcbe12c870811771154966.png\"\/><\/p>\n<div><figcaption>\u041d\u041a\u0410 \u0434\u043b\u044f abab|abbb<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/96f\/52e\/2f6\/96f52e2f6840eef0fd28de88b2a4c331.png\" alt=\"\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 abbb\" title=\"\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 abbb\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/96f\/52e\/2f6\/96f52e2f6840eef0fd28de88b2a4c331.png\"\/><\/p>\n<div><figcaption>\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 abbb<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u0448\u0430\u0433\u0435 0 \u041d\u041a\u0410 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435: \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <code>abab<\/code> \u0438\u043b\u0438 <code>abbb<\/code>. \u041d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u041d\u041a\u0410 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <code>abab<\/code>, \u043d\u043e \u0442\u0435\u0440\u043f\u0438\u0442 \u043d\u0435\u0443\u0434\u0430\u0447\u0443 \u043f\u043e\u0441\u043b\u0435 \u0448\u0430\u0433\u0430 3. \u0417\u0430\u0442\u0435\u043c \u041d\u041a\u0410 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u044b\u0431\u043e\u0440, \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0449\u0438\u0439 \u0435\u0433\u043e \u043a \u0448\u0430\u0433\u0443 4 \u0438, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044e. \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 <em>\u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c<\/em> (aka <em>\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c<\/em>, <em>backtracking<\/em>) \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u043c\u0443 \u0447\u0442\u0435\u043d\u0438\u044e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0440.\u0432., \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0441\u0434\u0430\u0442\u044c\u0441\u044f. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u041d\u041a\u0410 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0443\u0442\u0438, \u043d\u043e \u0432 \u0441\u0430\u043c\u043e\u043c \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435.<\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439, \u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u044f &#8212; \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0443 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445. \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c \u0438\u0437 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/299\/1da\/675\/2991da6758649dde55bb07b2a3f8bf00.png\" alt=\"\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 abbb\" title=\"\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 abbb\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/299\/1da\/675\/2991da6758649dde55bb07b2a3f8bf00.png\"\/><\/p>\n<div><figcaption>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 abbb<\/figcaption><\/div>\n<\/figure>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u043e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0432\u0441\u0435\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0438\u0437 \u043d\u0435\u0433\u043e \u043f\u043e \u043d\u0435\u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c. \u041d\u0430 \u0448\u0430\u0433\u0430\u0445 1 \u0438 2 \u041d\u041a\u0410 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0432\u0443\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0418 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0448\u0430\u0433\u0435 3 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u043e\u0434\u043d\u043e\u0433\u043e. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u0443\u043b\u044c\u0442\u0438\u0441\u0442\u0435\u0439\u0442\u043d\u043e\u043c (multi-state, \u0441\u0443\u043f\u0435\u0440\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u043c) \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0430 \u043f\u0443\u0442\u0438 \u0432 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u0447\u0438\u0442\u0430\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \u0412 \u0441\u0430\u043c\u043e\u043c \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u041d\u041a\u0410 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445 \u0441\u0440\u0430\u0437\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435, \u043d\u043e \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043b\u0438\u0448\u044c \u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u043e\u043c\u0443 \u043e\u0431\u044a\u0451\u043c\u0443 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0431\u0435\u0437 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0434\u043b\u0438\u043d\u044b \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u0418 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u0430\u0436\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0437\u0430 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u042d\u0442\u043e \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u043e\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0445\u043e\u0434\u0443 \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c. \u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u0430 \u043d\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043f\u0443\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u0445 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0441 <code>n<\/code> \u0443\u0437\u043b\u0430\u043c\u0438, \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e <code>n<\/code> \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c <img decoding=\"async\" class=\"formula inline\" source=\"2^n\" alt=\"2^n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d1\/d1d\/d1db0d9c696a8c056e7117dbbb4ef6db.svg\" width=\"auto\" height=\"auto\"\/> \u043f\u0443\u0442\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u0430\u043c\u0438.<\/p>\n<p><a class=\"anchor\" name=\"impl\" id=\"impl\"><\/a><\/p>\n<h2>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>\u0422\u043e\u043c\u043f\u0441\u043e\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 \u043c\u0443\u043b\u044c\u0442\u0438\u0441\u0442\u0435\u0439\u0442\u043d\u043e\u0439 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0435\u0439 \u0432 \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 1968 \u0433\u043e\u0434\u0430. \u0412 \u0435\u0433\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u041d\u041a\u0410 \u0431\u044b\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041f\u043e \u0441\u0443\u0442\u0438, \u0422\u043e\u043c\u043f\u0441\u043e\u043d \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b \u0440.\u0432. \u0432 \u0443\u043c\u043d\u044b\u0439 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u0421\u043e\u0440\u043e\u043a \u043b\u0435\u0442 \u0441\u043f\u0443\u0441\u0442\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0438 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0443\u0436\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u043d\u0430 \u043f\u043e\u0440\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u043c ANSI C. \u041f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 (\u043c\u0435\u043d\u0435\u0435 400 \u0441\u0442\u0440\u043e\u043a) \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 <a href=\"http:\/\/swtch.com\/~rsc\/regexp\/\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043e\u043d\u043b\u0430\u0439\u043d<\/a>. (\u0427\u0438\u0442\u0430\u0442\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0438\u043b\u0438 \u043a\u043e\u043c\u0443 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b \u0421\u0438 \u0438\/\u0438\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u043c\u043e\u0433\u0443\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u043b\u0438\u0448\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0430\u043c \u043a\u043e\u0434.)<\/p>\n<p><a class=\"anchor\" name=\"impl_compiling\" id=\"impl_compiling\"><\/a><\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432 \u041d\u041a\u0410<\/h3>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0440.\u0432. \u0432 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0439 \u041d\u041a\u0410. \u0412 \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043d\u0430 \u0421\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u041d\u041a\u0410 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0442\u0438\u043f\u0430 <code>State<\/code>:<\/p>\n<pre><code class=\"cpp\">struct State {     int c;     State *out;     State *out1;     int lastlist; }; <\/code><\/pre>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 State \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0440\u0451\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u041d\u041a\u0410, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f <code>c<\/code>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b43\/ff9\/ad5\/b43ff9ad5b78b0236c0e4422f934326c.png\" alt=\"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u041d\u041a\u0410\" title=\"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u041d\u041a\u0410\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b43\/ff9\/ad5\/b43ff9ad5b78b0236c0e4422f934326c.png\"\/><\/p>\n<div><figcaption>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u041d\u041a\u0410<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u0442\u0440\u043e\u0438\u0442 \u041d\u041a\u0410 \u0438\u0437 \u0440.\u0432., \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>.<\/code> (\u0442\u043e\u0447\u043a\u0430), \u044f\u0432\u043b\u044f\u044e\u0449\u0435\u043c\u0441\u044f \u044f\u0432\u043d\u044b\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438 (\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043f\u043e \u0418). \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>re2post<\/code> \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0440.\u0432. \u0432 \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u043d\u043e\u0442\u0430\u0446\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <img decoding=\"async\" class=\"formula inline\" source=\"a(bb)+a\" alt=\"a(bb)+a\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/1a\/1ab\/1ab9a811fbd065195ac8367c672da809.svg\" width=\"auto\" height=\"auto\"\/>) \u0432 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0435 \u0440.\u0432. \u0432 \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u043d\u043e\u0442\u0430\u0446\u0438\u0438 (<img decoding=\"async\" class=\"formula inline\" source=\"abb.+.a.\" alt=\"abb.+.a.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a7\/a7b\/a7bd1153adcd3851549d420a5ecdd798.svg\" width=\"auto\" height=\"auto\"\/>) (&#171;\u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439&#187; \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>.<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0442\u0430\u0441\u0438\u043c\u0432\u043e\u043b\u0430 &#171;\u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b&#187;, \u0430 \u043d\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u0422\u0430\u043a \u0436\u0435 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0431\u044b \u041d\u041a\u0410 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0440.\u0432. \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u043d\u043e\u0442\u0430\u0446\u0438\u0438. \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0438 \u0438\u0434\u0435\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u043b\u0438\u0436\u0435 \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430.)<\/p>\n<p>\u041f\u043e \u043c\u0435\u0440\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0435\u043a\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u041d\u041a\u0410. \u041b\u0438\u0442\u0435\u0440\u0430\u043b\u044b \u0432\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442 \u043d\u043e\u0432\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u041d\u041a\u0410 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0441\u0442\u0435\u043a\u0430, \u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0441\u0442\u0435\u043a\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442 \u043d\u043e\u0432\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"abb\" alt=\"abb\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ea\/ea0\/ea01e5fd8e4d8832825acdd20eac5104.svg\" width=\"auto\" height=\"auto\"\/> \u0438\u0437 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <img decoding=\"async\" class=\"formula inline\" source=\"abb.+.a.\" alt=\"abb.+.a.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a7\/a7b\/a7bd1153adcd3851549d420a5ecdd798.svg\" width=\"auto\" height=\"auto\"\/>, \u0441\u0442\u0435\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u041d\u041a\u0410 \u0434\u043b\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 <img decoding=\"async\" class=\"formula inline\" source=\"a\" alt=\"a\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0c\/0cc\/0cc175b9c0f1b6a831c399e269772661.svg\" width=\"auto\" height=\"auto\"\/>, <img decoding=\"async\" class=\"formula inline\" source=\"b\" alt=\"b\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92eb5ffee6ae2fec3ad71c777531578f.svg\" width=\"auto\" height=\"auto\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"b\" alt=\"b\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92eb5ffee6ae2fec3ad71c777531578f.svg\" width=\"auto\" height=\"auto\"\/>. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f <img decoding=\"async\" class=\"formula inline\" source=\".\" alt=\".\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/50\/505\/5058f1af8388633f609cadb75a75dc9d.svg\" width=\"auto\" height=\"auto\"\/> \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0432\u044b\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u044e \u0434\u0432\u0443\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 <img decoding=\"async\" class=\"formula inline\" source=\"b\" alt=\"b\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92eb5ffee6ae2fec3ad71c777531578f.svg\" width=\"auto\" height=\"auto\"\/> \u0438\u0437 \u0441\u0442\u0435\u043a\u0430, \u0438 \u0437\u0430\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442 \u0432 \u0441\u0442\u0435\u043a \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"bb.\" alt=\"bb.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/3f\/3f6\/3f6591111275e535b580c5db3abeb246.svg\" width=\"auto\" height=\"auto\"\/>. \u041a\u0430\u0436\u0434\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u041d\u041a\u0410 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d \u0441\u0432\u043e\u0438\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u043c\u0438 \u0438\u0437 \u043d\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u043c\u0438:<\/p>\n<pre><code class=\"cpp\">struct Frag {     State *start;     Ptrlist *out; }; <\/code><\/pre>\n<p>\u041f\u043e\u043b\u0435 <code>start<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043b\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430, \u0430 \u043f\u043e\u043b\u0435 <code>out<\/code> &#8212; \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 <code>State<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0449\u0451 \u043d\u0438 \u043a \u0447\u0435\u043c\u0443 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b. \u042d\u0442\u043e &#171;\u0432\u0438\u0441\u044f\u0447\u0438\u0435&#187; \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u041d\u041a\u0410.<\/p>\n<pre><code class=\"cpp\">union Ptrlist { Ptrlist *next; State *s; }; <\/code><\/pre>\n<p>\u041a\u043e\u0435-\u043a\u0430\u043a\u0438\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439:<\/p>\n<pre><code class=\"cpp\">Ptrlist *list1(State **outp); Ptrlist *append(Ptrlist *l1, Ptrlist *l2);  void patch(Ptrlist *l, State *s); <\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>list1()<\/code> \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f <code>outp<\/code>. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>append()<\/code> \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0434\u0432\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>patch<\/code> \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 &#171;\u0432\u0438\u0441\u044f\u0447\u0438\u0439&#187; \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 <code>l<\/code> \u043a \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e <code>s<\/code>: \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435 <code>*outp = s<\/code> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f <code>outp<\/code> \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 <code>l<\/code>.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u044d\u0442\u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0441\u0442\u0435\u043a\u0430, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u043e \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0432 \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u044b\u0439 \u041d\u041a\u0410.<\/p>\n<pre><code class=\"cpp\">State* post2nfa(char *postfix) {     char *p;     Frag stack[1000], *stackp, e1, e2, e;     State *s;      #define push(s) *stackp++ = s     #define pop()   *--stackp      stackp = stack;     for(p=postfix; *p; p++){         switch(*p){         \/* \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043b\u0435\u0435 *\/         }     }          e = pop();     patch(e.out, matchstate);     return e.start; } <\/code><\/pre>\n<p>\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438:<\/p>\n<p>\u041b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/afb\/bc5\/7f0\/afbbc57f0a6b7cf3d564b10e35c967b3.png\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/afb\/bc5\/7f0\/afbbc57f0a6b7cf3d564b10e35c967b3.png\"\/><\/figure>\n<pre><code class=\"cpp\">default:     s = state(*p, NULL, NULL);     push(frag(s, list1(&amp;s->out));     break; <\/code><\/pre>\n<p>\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u0418 (\u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f):<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/97f\/4b5\/1e3\/97f4b51e331f4fea316658132c865459.png\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/97f\/4b5\/1e3\/97f4b51e331f4fea316658132c865459.png\"\/><\/figure>\n<pre><code class=\"cpp\">case '.':     e2 = pop();     e1 = pop();     patch(e1.out, e2.start);     push(frag(e1.start, e2.out));     break; <\/code><\/pre>\n<p>\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u0418\u041b\u0418 (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430):<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cd5\/9a3\/62e\/cd59a362e0cb1c3018fe69b02e44f077.png\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cd5\/9a3\/62e\/cd59a362e0cb1c3018fe69b02e44f077.png\"\/><\/figure>\n<pre><code class=\"cpp\">case '|':     e2 = pop();     e1 = pop();     s = state(Split, e1.start, e2.start);     push(frag(s, append(e1.out, e2.out)));     break; <\/code><\/pre>\n<p>\u041d\u0443\u043b\u044c \u0438\u043b\u0438 \u043e\u0434\u0438\u043d:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/350\/829\/d58\/350829d5882b7eef41ab5eb9f9196ef1.png\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/350\/829\/d58\/350829d5882b7eef41ab5eb9f9196ef1.png\"\/><\/figure>\n<pre><code class=\"cpp\">case '?':     e = pop();     s = state(Split, e.start, NULL);     push(frag(s, append(e.out, list1(&amp;s->out1))));     break; <\/code><\/pre>\n<p>\u041d\u0443\u043b\u044c \u0438 \u0431\u043e\u043b\u0435\u0435:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/86a\/3af\/f9d\/86a3aff9dbbd2b61ec0a69ee27d3890f.png\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/86a\/3af\/f9d\/86a3aff9dbbd2b61ec0a69ee27d3890f.png\"\/><\/figure>\n<pre><code class=\"cpp\">case '*':     e = pop();     s = state(Split, e.start, NULL);     patch(e.out, s);     push(frag(s, list1(&amp;s->out1)));     break; <\/code><\/pre>\n<p>\u041e\u0434\u0438\u043d \u0438 \u0431\u043e\u043b\u0435\u0435:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d1b\/05c\/6b5\/d1b05c6b55d026a011b6e541d72679f0.png\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d1b\/05c\/6b5\/d1b05c6b55d026a011b6e541d72679f0.png\"\/><\/figure>\n<pre><code class=\"cpp\">case '+':     e = pop();     s = state(Split, e.start, NULL);     patch(e.out, s);     push(frag(e.start, list1(&amp;s->out1)));     break; <\/code><\/pre>\n<p><a class=\"anchor\" name=\"impl_simulating\" id=\"impl_simulating\"><\/a><\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f: \u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u041d\u041a\u0410<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u041d\u041a\u0410 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d, \u043d\u0443\u0436\u043d\u043e \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443. \u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0442\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 <code>State<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430:<\/p>\n<pre><code class=\"cpp\">struct List {     State **s;     int n; }; <\/code><\/pre>\n<p>\u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u0432\u0430 \u0441\u043f\u0438\u0441\u043a\u0430: <code>clist<\/code> &#8212; \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u041d\u041a\u0410 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0438 <code>nlist<\/code> &#8212; \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u041d\u041a\u0410 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u0426\u0438\u043a\u043b \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 <code>clist<\/code>, \u043f\u043e\u043c\u0435\u0449\u0430\u044f \u0432 \u043d\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0430 \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0432 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435.<\/p>\n<pre><code class=\"cpp\">int match(State *start, char *s) {     List *clist, *nlist, *t;      \/* l1 and l2 are preallocated globals *\/     clist = startlist(start, &amp;l1);     nlist = &amp;l2;     for(; *s; s++){         step(clist, *s, nlist);         t = clist; clist = nlist; nlist = t;    \/* swap clist, nlist *\/     }     return ismatch(clist); } <\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0446\u0438\u043a\u043b\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>match<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u0432\u0430 \u043f\u0440\u0435\u0430\u043b\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u0430 <code>l1<\/code> \u0438 <code>l2<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <code>clist<\/code> \u0438 <code>nlist<\/code>, \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044f \u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0448\u0430\u0433\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0437\u043d\u0430\u0447\u0438\u0442 \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0434\u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u043e\u0434 \u0440.\u0432.<\/p>\n<pre><code class=\"cpp\">int ismatch(List *l) {     int i;      for(i=0; i&lt;l->n; i++)         if(l->s[i] == matchstate)             return 1;     return 0; } <\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>addstate<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0442\u0430\u043c \u0435\u0449\u0451 \u043d\u0435\u0442. \u041f\u043e\u043b\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>listid<\/code> \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 (list generation number). \u041a\u043e\u0433\u0434\u0430 <code>addstate<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 <code>s<\/code> \u0432 \u0441\u043f\u0438\u0441\u043e\u043a, \u0432 <code>s->lastlist<\/code> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>listid<\/code>. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u044d\u0442\u0438 \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0432\u043d\u044b, \u0442\u043e\u0433\u0434\u0430 <code>s<\/code> \u0443\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u043f\u0438\u0441\u043a\u0435. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>addstate<\/code> \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u043d\u0435\u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c: \u0435\u0441\u043b\u0438 <code>s<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c <code>Split<\/code> \u0441 \u0434\u0432\u0443\u043c\u044f \u043d\u0435\u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c\u0438, \u0432\u0435\u0434\u0443\u0449\u0438\u043c\u0438 \u0432 \u043d\u043e\u0432\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, <code>addstate<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0442\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f <code>s<\/code>.<\/p>\n<pre><code class=\"cpp\">void addstate(List *l, State *s) {     if(s == NULL || s->lastlist == listid)         return;     s->lastlist = listid;     if(s->c == Split){         \/* follow unlabeled arrows *\/         addstate(l, s->out);         addstate(l, s->out1);         return;     }     l->s[l->n++] = s; } <\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>startlist<\/code> \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0432 \u043d\u0435\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">List* startlist(State *s, List *l) {     listid++;     l->n = 0;     addstate(l, s);     return l; } <\/code><\/pre>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>step<\/code> \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u0442 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0447\u0435\u0440\u0435\u0437 \u041d\u041a\u0410, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 <code>clist<\/code> \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 <code>nlist<\/code>:<\/p>\n<pre><code class=\"cpp\">void step(List *clist, int c, List *nlist) {     int i;     State *s;      listid++;     nlist->n = 0;     for(i=0; i&lt;clist->n; i++){         s = clist->s[i];         if(s->c == c)             addstate(nlist, s->out);     } } <\/code><\/pre>\n<p><a class=\"anchor\" name=\"perf\" id=\"perf\"><\/a><\/p>\n<h2>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/h2>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u0421\u0438 \u043d\u0435 \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0441 \u043f\u0440\u0438\u0446\u0435\u043b\u043e\u043c \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041d\u043e \u0434\u0430\u0436\u0435 \u0442\u0430\u043a, \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u043e\u0431\u043e\u0433\u043d\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u043a\u043e\u0433\u0434\u0430 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0435\u043b\u0438\u043a\u0430. \u042d\u0442\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0440.\u0432. \u043d\u0430 \u0442.\u043d. \u043f\u0430\u0442\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438.<\/p>\n<p>\u0414\u0430\u043d\u043e \u0440.\u0432. <img decoding=\"async\" class=\"formula inline\" source=\"{a?}^{n}a^n\" alt=\"{a?}^{n}a^n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92e76d6e65c6fdb43e160a326022a5ef.svg\" width=\"auto\" height=\"auto\"\/>. \u041e\u043d\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 <img decoding=\"async\" class=\"formula inline\" source=\"a^n\" alt=\"a^n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/02\/02b\/02b39c4bea11d679ef78cad17231b4d8.svg\" width=\"auto\" height=\"auto\"\/>, \u043a\u043e\u0433\u0434\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"a?\" alt=\"a?\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/77\/771\/771d1f0f5e79495265522d3392ffbadb.svg\" width=\"auto\" height=\"auto\"\/> \u043d\u0435 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0434\u043b\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0432\u0441\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0441 <img decoding=\"async\" class=\"formula inline\" source=\"a^n\" alt=\"a^n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/02\/02b\/02b39c4bea11d679ef78cad17231b4d8.svg\" width=\"auto\" height=\"auto\"\/>. \u0414\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432. \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c (\u0431\u0435\u043a\u0442\u0440\u0435\u043a\u0438\u043d\u0433\u043e\u043c) \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"?\" alt=\"?\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d1\/d14\/d1457b72c3fb323a2671125aef3eab5d.svg\" width=\"auto\" height=\"auto\"\/> (\u043d\u0443\u043b\u044c-\u0438\u043b\u0438-\u043e\u0434\u043d\u043e), \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c <img decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b8\/7b8b965ad4bca0e41ab51de7b31363a1.svg\" width=\"auto\" height=\"auto\"\/> \u0442\u0430\u043a\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0434\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0442\u043e \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"2^n\" alt=\"2^n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d1\/d1d\/d1db0d9c696a8c056e7117dbbb4ef6db.svg\" width=\"auto\" height=\"auto\"\/> \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u041d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 (\u0442.\u043d. \u043a\u0432\u0430\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432) <img decoding=\"async\" class=\"formula inline\" source=\"?\" alt=\"?\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d1\/d14\/d1457b72c3fb323a2671125aef3eab5d.svg\" width=\"auto\" height=\"auto\"\/> \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u043d\u0443\u043b\u044c \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 \u0431\u0435\u043a\u0442\u0440\u0435\u043a\u0438\u043d\u0433\u043e\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"O(2^n)\" alt=\"O(2^n)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c7\/c7c\/c7cf1b9b9c957554447d062a3d1ab89c.svg\" width=\"auto\" height=\"auto\"\/> \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438 \u043d\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"n=25\" alt=\"n=25\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d6\/d6f\/d6f98e38ebd1790e327c4a657bfca8fb.svg\" width=\"auto\" height=\"auto\"\/> \u0438 \u0431\u043e\u043b\u0435\u0435.<\/p>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0434\u043b\u0438\u043d\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e <img decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b8\/7b8b965ad4bca0e41ab51de7b31363a1.svg\" width=\"auto\" height=\"auto\"\/> \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0442\u0430\u043a \u0436\u0435 \u0434\u043b\u0438\u043d\u043e\u0439 <img decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b8\/7b8b965ad4bca0e41ab51de7b31363a1.svg\" width=\"auto\" height=\"auto\"\/>, \u0447\u0442\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u0430\u0451\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 <img decoding=\"async\" class=\"formula inline\" source=\"O(n^2)\" alt=\"O(n^2)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9f\/9f8\/9f84a66d88d24c3b1bc91df5b5346a13.svg\" width=\"auto\" height=\"auto\"\/>. (\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043b\u0438\u043d\u0435\u0439\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0440.\u0432. \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u043c \u043f\u043e \u043c\u0435\u0440\u0435 \u0440\u043e\u0441\u0442\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u0414\u043b\u044f \u0440.\u0432. \u0434\u043b\u0438\u043d\u043e\u0439 <img decoding=\"async\" class=\"formula inline\" source=\"m\" alt=\"m\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6f\/6f8\/6f8f57715090da2632453988d9a1501b.svg\" width=\"auto\" height=\"auto\"\/> \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 \u0434\u043b\u0438\u043d\u043e\u0439 <img decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b8\/7b8b965ad4bca0e41ab51de7b31363a1.svg\" width=\"auto\" height=\"auto\"\/> \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"O(m * n)\" alt=\"O(m * n)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/28\/28c\/28c913b1a690a450ecd12bf11e201c9c.svg\" width=\"auto\" height=\"auto\"\/> \u0432\u0440\u0435\u043c\u0435\u043d\u0438.)<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"a^n\" alt=\"a^n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/02\/02b\/02b39c4bea11d679ef78cad17231b4d8.svg\" width=\"auto\" height=\"auto\"\/> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440.\u0432. <img decoding=\"async\" class=\"formula inline\" source=\"a?^na^n\" alt=\"a?^na^n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e0\/e02\/e0242f3965e16ceba8f6857a2f386e13.svg\" width=\"auto\" height=\"auto\"\/>:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bcb\/d2a\/bca\/bcbd2abca5ef2dd54dc403fc617e1d57.png\" alt=\"Performance graph regular expression and text size na?nan matching an\" title=\"Performance graph regular expression and text size na?nan matching an\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bcb\/d2a\/bca\/bcbd2abca5ef2dd54dc403fc617e1d57.png\"\/><\/p>\n<div><figcaption>Performance graph regular expression and text size na?nan matching an<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0442\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e y-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0448\u043a\u0430\u043b\u0435 \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0439 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0435.<\/p>\n<p>\u0418\u0437 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u044f\u0441\u043d\u043e, \u0447\u0442\u043e Perl, PCRE, Python \u0438 Ruby \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u0431\u0435\u043a\u0442\u0440\u0435\u043a\u0438\u043d\u0433\u0430. PCRE \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"n=23\" alt=\"n=23\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/87\/875\/875869eb2278cc2981b7b77f4b19d030.svg\" width=\"auto\" height=\"auto\"\/>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e\u0441\u043b\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0448\u0430\u0433\u043e\u0432. \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Perl 5.6, \u0435\u0433\u043e \u0434\u0432\u0438\u0436\u043e\u043a \u0440.\u0432. <a href=\"http:\/\/perlmonks.org\/index.pl?node_id=502408\" rel=\"noopener noreferrer nofollow\">\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 (\u043c\u0435\u043c\u043e\u0438\u0437\u0430\u0446\u0438\u044e)<\/a> \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442\u0430\u0445 \u043f\u0430\u043c\u044f\u0442\u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0435 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438. \u041a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0433\u0440\u0430\u0444\u0438\u043a, \u043c\u0435\u043c\u043e\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e: \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0441\u0442\u0451\u0442 \u043f\u043e \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a \u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438. \u041d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e Java \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c, \u043e\u043d\u0430 \u0442\u0430\u043a \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c. \u041f\u043e \u0444\u0430\u043a\u0442\u0443, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>java.util.regex<\/code> \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434. PHP \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 PCRE.<\/p>\n<p>\u0422\u043e\u043d\u043a\u0430\u044f \u0433\u043e\u043b\u0443\u0431\u0430\u044f \u043b\u0438\u043d\u0438\u044f &#8212; \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u043d\u0430 \u0421\u0438, \u0434\u0430\u043d\u043d\u0430\u044f \u0432\u044b\u0448\u0435. Awk, Tcl, GNU grep \u0438 GNU awk \u0441\u0442\u0440\u043e\u044f\u0442 \u0414\u041a\u0410 \u043d\u0435 \u043f\u0440\u0435\u0434\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044f \u0438\u0445 \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u043b\u0435\u0442\u0443, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0432\u043e\u0437\u0440\u0430\u0437\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0435\u0441\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432 \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c, \u0442.\u043a. \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0440\u0435\u0434\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u042d\u0442\u043e\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0443\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0443\u0442\u044c: \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u044b\u0431\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c, \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c \u0438 \u043c\u0430\u043b\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430 \u0432\u0441\u0435\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e, \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0434\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435) \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e \u0432\u044b\u0431\u043e\u0440\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0445\u043e\u0442\u044f \u0441\u0442\u043e\u043b\u044c \u0434\u0440\u0430\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u0440\u043e\u0434\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u0434\u043a\u043e, \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u043c\u0435\u043d\u0435\u0435 \u0434\u0440\u0430\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0435. \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432 \u0441\u0435\u0431\u044f \u0440.\u0432. <img decoding=\"async\" class=\"formula inline\" source=\"(.*) (.*) (.*) (.*) (.*)\" alt=\"(.*) (.*) (.*) (.*) (.*)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/33\/336\/3366c6d38ad037d522f3169617e04b70.svg\" width=\"auto\" height=\"auto\"\/> \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437 \u043f\u044f\u0442\u0438 \u043f\u043e\u043b\u0435\u0439 \u043f\u043e \u043f\u0440\u043e\u0431\u0435\u043b\u0430\u043c, \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432, \u043a\u043e\u0433\u0434\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u044e\u0442, \u043a\u0430\u043a\u0438\u0435 \u0438\u0437 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u043e\u0440\u043e\u0433\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u043c\u0438 \u0438 \u0438\u0437\u0431\u0435\u0433\u0430\u044e\u0442 \u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f; \u0438\u043b\u0438 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442.\u043d. <a href=\"http:\/\/search.cpan.org\/~dankogai\/Regexp-Optimizer-0.15\/lib\/Regexp\/Optimizer.pm\" rel=\"noopener noreferrer nofollow\">\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u044b<\/a>. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0443\u0445\u0438\u0449\u0440\u0435\u043d\u0438\u0439: \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u0434\u043e\u0440\u043e\u0433\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0440.\u0432.<\/p>\n<p><a class=\"anchor\" name=\"caching\" id=\"caching\"><\/a><\/p>\n<h2>\u041a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u041d\u041a\u0410 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0414\u041a\u0410<\/h2>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0414\u041a\u0410 \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438, \u0447\u0435\u043c \u041d\u041a\u0410, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0414\u041a\u0410 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438: \u0443 \u043d\u0438\u0445 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u0432\u044b\u0431\u043e\u0440\u0430 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439. \u041b\u044e\u0431\u043e\u0439 \u041d\u041a\u0410 \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0439 \u0414\u041a\u0410, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043f\u0438\u0441\u043a\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u041d\u041a\u0410.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u041d\u041a\u0410, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0440\u0430\u043d\u0435\u0435 \u0434\u043b\u044f \u0440.\u0432. <img decoding=\"async\" class=\"formula inline\" source=\"abab|abbb\" alt=\"abab|abbb\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/88\/88c\/88c4c620286cf3e86b90c0c22aaeb16d.svg\" width=\"auto\" height=\"auto\"\/>, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9ad\/4f2\/14b\/9ad4f214bdd2af8cf1f288ffc444f03b.png\" alt=\"\u041d\u041a\u0410 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f abab|abbb\" title=\"\u041d\u041a\u0410 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f abab|abbb\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9ad\/4f2\/14b\/9ad4f214bdd2af8cf1f288ffc444f03b.png\"\/><\/p>\n<div><figcaption>\u041d\u041a\u0410 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f abab|abbb<\/figcaption><\/div>\n<\/figure>\n<p>\u042d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0439 \u0414\u041a\u0410 \u043c\u043e\u0433 \u0431\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6d7\/7c3\/ea4\/6d77c3ea4f7a5aecaf8770fc45de7cc0.png\" alt=\"\u0414\u041a\u0410 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f abab|abbb\" title=\"\u0414\u041a\u0410 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f abab|abbb\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6d7\/7c3\/ea4\/6d77c3ea4f7a5aecaf8770fc45de7cc0.png\"\/><\/p>\n<div><figcaption>\u0414\u041a\u0410 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f abab|abbb<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432 \u0414\u041a\u0410 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043f\u0438\u0441\u043a\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0438\u0437 \u041d\u041a\u0410.<\/p>\n<p>\u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u043e\u0434\u0435, \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0439 \u0414\u041a\u0410: \u043a\u0430\u0436\u0434\u044b\u0439 <code>List<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0414\u041a\u0410, \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>step<\/code> \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044f <code>list<\/code> \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u0432 \u043a\u0430\u043a\u043e\u0435 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0414\u041a\u0410 \u043f\u0435\u0440\u0435\u0439\u0442\u0438. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0414\u041a\u0410, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044f \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u044d\u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0448\u0430\u0433\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>List<\/code> \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438\u0437\u0431\u0435\u0436\u0430\u0432 \u0437\u0430\u0442\u0440\u0430\u0442 \u043d\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0438, \u043f\u043e \u0441\u0443\u0442\u0438, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0439 \u0414\u041a\u0410 \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u042d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430. \u041d\u0430\u0447\u0430\u0432 \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u041d\u041a\u0410 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438, \u043d\u0430\u043c  \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u0441\u0442\u0430 \u0441\u0442\u0440\u043e\u043a \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0414\u041a\u0410.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0435\u0448, \u0441\u043f\u0435\u0440\u0432\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0414\u041a\u0410:<\/p>\n<pre><code class=\"cpp\">struct DState {     List l;     DState *next[256];     DState *left;     DState *right; }; <\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>DState<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0435\u0439 \u0441\u043f\u0438\u0441\u043a\u0430 <code>l<\/code>. \u041c\u0430\u0441\u0441\u0438\u0432 <code>next<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430: \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>d<\/code> \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0441\u043e \u0432\u0445\u043e\u0434\u0430 <code>c<\/code>, \u0442\u043e\u0433\u0434\u0430 <code>d->next[c]<\/code> \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c. \u0415\u0441\u043b\u0438 <code>d->next[c]<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>null<\/code>, \u0442\u043e\u0433\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0435\u0449\u0451 \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043e. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>nextstate<\/code> \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430.<\/p>\n<p>\u0421\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u0440.\u0432. \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0432 <code>d->next[c]<\/code>, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>nextstate<\/code> \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439.<\/p>\n<pre><code class=\"cpp\">int match(DState *start, char *s) {     int c;     DState *d, *next;          d = start;     for(; *s; s++){         c = *s &amp; 0xFF;         if((next = d->next[c]) == NULL)             next = nextstate(d, c);         d = next;     }     return ismatch(&amp;d->l); } <\/code><\/pre>\n<p>\u0412\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>Dstate<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u044b, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043d\u0430\u0439\u0442\u0438 \u0438\u0445 \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e <code>List<\/code>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c \u0438\u0445 \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>List<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0430. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>dstate<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>DState<\/code> \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e <code>List<\/code>, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u044f \u043f\u0430\u043c\u044f\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">DState* dstate(List *l) {     int i;     DState **dp, *d;     static DState *alldstates;      qsort(l->s, l->n, sizeof l->s[0], ptrcmp);      \/* look in tree for existing DState *\/     dp = &amp;alldstates;     while((d = *dp) != NULL){         i = listcmp(l, &amp;d->l);         if(i &lt; 0)             dp = &amp;d->left;         else if(i > 0)             dp = &amp;d->right;         else             return d;     }          \/* allocate, initialize new DState *\/     d = malloc(sizeof *d + l->n*sizeof l->s[0]);     memset(d, 0, sizeof *d);     d->l.s = (State**)(d+1);     memmove(d->l.s, l->s, l->n*sizeof l->s[0]);     d->l.n = l->n;      \/* insert in tree *\/     *dp = d;     return d; } <\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>nextate<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0448\u0430\u0433 \u041d\u041a\u0410 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>DState<\/code>:<\/p>\n<pre><code class=\"cpp\">DState* nextstate(DState *d, int c) {     step(&amp;d->l, c, &amp;l1);     return d->next[c] = dstate(&amp;l1); } <\/code><\/pre>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0414\u041a\u0410 &#8212; \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>DState<\/code>, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u041d\u041a\u0410:<\/p>\n<pre><code class=\"cpp\">DState* startdstate(State *start) {     return dstate(startlist(start, &amp;l1)); } <\/code><\/pre>\n<p>(\u041a\u0430\u043a \u0438 \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u041d\u041a\u0410, <code>l1<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0430\u043b\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <code>List<\/code>.)<\/p>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>DState<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438 \u0414\u041a\u0410, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438: \u0435\u0441\u043b\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0435\u0449\u0451 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u043e\u0441\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u0438\u0441\u043a\u0430, \u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432 \u043a\u0435\u0448\u0435. \u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043e\u0439 \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u0431\u044b\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u043e \u0414\u041a\u0410 \u0437\u0430 \u0440\u0430\u0437. \u042d\u0442\u043e \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u0442\u043a\u0438 \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c, \u043d\u043e \u0446\u0435\u043d\u043e\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u043c \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u043e\u0431 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0438 \u043e\u0431\u044a\u0451\u043c\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0414\u041a\u0410 \u043d\u0430\u043b\u0435\u0442\u0443. \u0422.\u043a. <code>DStates<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0435\u0448\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <code>step<\/code>, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>dstate<\/code> \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0414\u041a\u0410 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0435\u0441\u043b\u0438 \u043a\u0435\u0448 \u0432\u044b\u0440\u043e\u0441 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u043e. \u042d\u0442\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0437\u0430\u043c\u0435\u043d\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 <code>dstate<\/code> \u0438 <code>nextstate<\/code>, \u043f\u043b\u044e\u0441 \u043e\u043a\u043e\u043b\u043e 50 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u044c\u044e. \u0422\u0430\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <a href=\"http:\/\/swtch.com\/~rsc\/regexp\/\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043e\u043d\u043b\u0430\u0439\u043d<\/a>. (<a href=\"http:\/\/cm.bell-labs.com\/cm\/cs\/awkbook\/\" rel=\"noopener noreferrer nofollow\">awk<\/a> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u043e\u0445\u043e\u0436\u0443\u044e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043b\u0438\u043c\u0438\u0442\u043e\u043c \u0432 32 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0447\u0442\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435 n=28 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0432\u044b\u0448\u0435.)<\/p>\n<p>\u041d\u041a\u0410, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 \u0440.\u0432., \u0438\u043c\u0435\u044e\u0442 \u0441\u043a\u043b\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c: \u043e\u043d\u0438 \u043f\u043e\u0441\u0435\u0449\u0430\u044e\u0442 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u043f\u043e \u0442\u0435\u043c \u0436\u0435 \u0441\u0430\u043c\u044b\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u043c \u0441\u043d\u043e\u0432\u0430 \u0438 \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c: \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u043f\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c, \u043a\u0430\u043a \u0438 \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u041d\u041a\u0410, \u043d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043f\u043e \u044d\u0442\u043e\u0439 \u0436\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u043a \u043f\u0430\u043c\u044f\u0442\u0438. \u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0414\u041a\u0410 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0412 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440.\u0432. \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0414\u041a\u0410.<\/p>\n<p><a class=\"anchor\" name=\"real_regex\" id=\"real_regex\"><\/a><\/p>\n<h2>\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/h2>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0440.\u0432. \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u0442\u043e, \u0441 \u0447\u0435\u043c \u043c\u043e\u0433\u0443\u0442 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044f. \u041f\u043e\u043b\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u0432\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p><em>\u0421\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b<\/em> (<em>character classes<\/em>). \u0421\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, <code>[0-9]<\/code> \u0438\u043b\u0438 <code>\\w<\/code> \u0438\u043b\u0438 <code>.<\/code> (\u0442\u043e\u0447\u043a\u0430), \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0425\u043e\u0442\u044f \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0443\u0437\u043b\u0430 \u041d\u041a\u0410 \u0434\u043b\u044f \u0438\u0445 \u044f\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f. <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/basedefs\/xbd_chap09.html\" rel=\"noopener noreferrer nofollow\">POSIX<\/a> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0432\u0440\u043e\u0434\u0435 <code>[[:upper:]]<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u043d\u044f\u044e\u0442 \u0441\u0432\u043e\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043b\u043e\u043a\u0430\u043b\u0438. \u041d\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u0438\u0445 \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0430 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u041d\u041a\u0410.<\/p>\n<p><em>\u042d\u043a\u0440\u0430\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/em> (<em>escape sequences<\/em>). \u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0440.\u0432. \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439, \u043a\u0430\u043a \u0434\u043b\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441 \u043c\u0435\u0442\u0430\u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438 (<code>\\(<\/code>, <code>\\)<\/code>, <code>\\\\<\/code> \u0438 \u0442.\u043f.), \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u0432\u0441\u044f\u043a\u0438\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0440\u0443\u0434\u043d\u043e\u0432\u0432\u043e\u0434\u0438\u043c\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 <code>\\n<\/code>.<\/p>\n<p><em>\u0421\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435<\/em> (<em>counted repetition<\/em>). \u041c\u043d\u043e\u0433\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440.\u0432. \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439 <code>{n}<\/code> \u0434\u043b\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\u0430; <code>{n,m}<\/code> \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 <code>n<\/code> \u0438 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 <code>m<\/code> \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439, \u0430 <code>{n,}<\/code> \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <code>n<\/code> \u0438 \u0431\u043e\u043b\u0435\u0435. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c \u043c\u043e\u0433\u0443\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0446\u0438\u043a\u043b\u044b. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u041d\u041a\u0410 \u0438\u043b\u0438 \u0414\u041a\u0410 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f: <code>e{3}<\/code> \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <code>eee<\/code>; <code>e{3,5}<\/code> &#8212; \u0432 <code>eeee?e?<\/code>, \u0430 <code>e{3,}<\/code> &#8212; \u0432 <code>eee+<\/code>.<\/p>\n<p><em>\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a)<\/em> (<em>submatch extraction<\/em>). \u041a\u043e\u0433\u0434\u0430 \u0440.\u0432. \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0441\u0442\u0440\u043e\u043a, \u0431\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0440.\u0432. \u0432\u0440\u043e\u0434\u0435 <code>([0-9]+-[0-9]+-[0-9]+) ([0-9]+:[0-9]+)<\/code> \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e \u0441\u0442\u0440\u043e\u043a\u0443 (\u0441\u043a\u0430\u0436\u0435\u043c, \u0434\u0430\u0442\u0443 \u0438 \u0432\u0440\u0435\u043c\u044f), \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440.\u0432. \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u0435\u043a\u0441\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0432\u043f\u0430\u043b \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043d\u0430 Perl&#8217;\u0435:<\/p>\n<pre><code class=\"perl\">if(\/([0-9]+-[0-9]+-[0-9]+) ([0-9]+:[0-9]+)\/){     print \"date: $1, time: $2\\n\"; } <\/code><\/pre>\n<p>\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u043a\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0445 \u043d\u0430\u0443\u043a, \u0438, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0441\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u0436\u0435, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0432 \u0441\u0442\u0438\u043b\u0435 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u043c\u043e\u0433\u0443 \u0431\u044b\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <code>regexp(3)<\/code> \u0432\u043e\u0441\u044c\u043c\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Unix \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0430 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 1985, \u0445\u043e\u0442\u044f, \u043a\u0430\u043a \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u043e \u043d\u0438\u0436\u0435, \u043e\u043d\u0430 \u043d\u0435 \u0431\u044b\u043b\u0430 \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u0430.<\/p>\n<p><em>\u041d\u0435\u044f\u043a\u043e\u0440\u043d\u044b\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/em> (<em>unanchored matches<\/em>). \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442, \u0447\u0442\u043e \u0440.\u0432. \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0440.\u0432. \u0423\u0442\u0438\u043b\u0438\u0442\u044b Unix \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0441\u0430\u043c\u043e\u0435 \u0434\u043b\u0438\u043d\u043d\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u043f\u0435\u0440\u0432\u044b\u043c (\u0441 \u043b\u0435\u0432\u043e\u0433\u043e \u043a\u0440\u0430\u044f). \u041d\u0435\u044f\u043a\u043e\u0440\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>e<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u044b\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0439 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438: \u043e\u043d \u043f\u043e\u0434\u043e\u0431\u0435\u043d \u043f\u043e\u0438\u0441\u043a\u0443 \u043f\u043e \u0440.\u0432. <code>.*(e).*<\/code>, \u0433\u0434\u0435 \u043f\u0435\u0440\u0432\u043e\u0435 <code>.*<\/code> \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439.<\/p>\n<p><em>\u041d\u0435\u0436\u0430\u0434\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b<\/em> (<em>non-greedy operators<\/em>). \u0412 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0440.\u0432. Unix \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f <code>?<\/code>, <code>*<\/code> \u0438 <code>+<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u043e\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u0440.\u0432. \u0431\u044b\u043b\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e: \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 <code>abcd<\/code> \u043f\u043e \u0440.\u0432. <code>(.+)(.+)<\/code>, \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <code>(.+)<\/code> \u043d\u0430\u0439\u0434\u0451\u0442 <code>abc<\/code>, \u0430 \u0432\u0442\u043e\u0440\u043e\u0435 &#8212; <code>d<\/code>. \u0421\u0435\u0439\u0447\u0430\u0441 \u0442\u0430\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0436\u0430\u0434\u043d\u044b\u043c\u0438. Perl \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <code>??<\/code>, <code>*?<\/code> \u0438 <code>+?<\/code> \u043a\u0430\u043a \u043d\u0435\u0436\u0430\u0434\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0449\u0443\u0442 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f: \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 <code>abcd<\/code> \u043f\u043e \u0440.\u0432. <code>(.+?)(.+?)<\/code>, \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <code>(.+?)<\/code> \u043d\u0430\u0439\u0434\u0451\u0442 \u0442\u043e\u043b\u044c\u043a\u043e <code>a<\/code>, \u0430 \u0432\u0442\u043e\u0440\u043e\u0435 &#8212; <code>bcd<\/code>. \u041f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e, \u0436\u0430\u0434\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u0432 \u0446\u0435\u043b\u043e\u043c \u0440.\u0432. \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c; \u0436\u0430\u0434\u043d\u043e\u0441\u0442\u044c \u0432\u043b\u0438\u044f\u0435\u0442 \u043b\u0438\u0448\u044c \u043d\u0430 \u0432\u044b\u0431\u043e\u0440 \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0436\u0430\u0434\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u043e\u0433\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c \u0432 <code>e?<\/code> \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f <code>e<\/code>, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e; \u043f\u0440\u0438 <code>e??<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438. \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e\u0434 \u043d\u0435\u0436\u0430\u0434\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b.<\/p>\n<p><em>\u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f<\/em> (<em>assertions<\/em>, <em>\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/em>). \u041c\u0435\u0442\u0430\u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0440.\u0432. <code>^<\/code> \u0438 <code>$<\/code> \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439 \u043e \u0442\u0435\u043a\u0441\u0442\u0435 \u0440\u044f\u0434\u043e\u043c \u0441 \u043d\u0438\u043c\u0438: <code>^<\/code> \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 (\u0438\u043b\u0438 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0442\u0440\u043e\u043a\u0438), \u0430 <code>$<\/code> \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 (\u0438\u043b\u0438 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438). Perl \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0431\u043e\u043b\u044c\u0448\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u043b\u043e\u0432\u0430 (<code>\\b<\/code>), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0435\u043d\u043d\u043e-\u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c, \u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 &#8212; \u043d\u0435\u0442, \u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. Perl \u0442\u0430\u043a \u0436\u0435 \u043e\u0431\u043e\u0431\u0449\u0438\u043b \u044d\u0442\u0443 \u0438\u0434\u0435\u044e \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 lookahead \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f\u043c\u0438: <code>(?=re)<\/code> \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>re<\/code>, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432; <code>(?!re)<\/code> \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>re<\/code>. Lookbehind \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f <code>(?&lt;=re)<\/code> \u0438 <code>(?&lt;!re)<\/code> \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u0445\u043e\u0436\u0438, \u043d\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u0435\u043b\u0430\u044e\u0442 \u0434\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435. \u041f\u0440\u043e\u0441\u0442\u044b\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u0440\u043e\u0434\u0435 <code>^<\/code>, <code>$<\/code> \u0438 <code>\\b<\/code> \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u041d\u041a\u0410, \u043e\u0442\u043b\u043e\u0436\u0438\u0432 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442. \u041e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u043e, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u041d\u041a\u0410.<\/p>\n<p><em>\u041e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438<\/em> (<em>backreferences<\/em>). \u041a\u0430\u043a \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435, \u043d\u0438\u043a\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0440.\u0432. \u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. (\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, <a href=\"http:\/\/perl.plover.com\/NPC\/NPC-3SAT.html\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u0434\u0430\u0447\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f NP-\u043f\u043e\u043b\u043d\u043e\u0439<\/a>, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043d\u0430\u0439\u0434\u0451\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u043e\u0432\u043e\u0441\u0442\u044c\u044e \u0432 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0445 \u043d\u0430\u0443\u043a\u0430\u0445, \u0438 <a href=\"http:\/\/www.claymath.org\/Popular_Lectures\/Minesweeper\/\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u043f\u0440\u0438\u0437 \u0432 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432<\/a>.) \u0421\u0430\u043c\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 awk \u0438 egrep, \u0430 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438\u0445. \u041d\u043e \u044d\u0442\u043e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u043e\u0439: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0438\u043c\u0438. \u0418 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/basedefs\/xbd_chap09.html\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 POSIX \u0434\u043b\u044f \u0440.\u0432<\/a>. \u0414\u0430\u0436\u0435 \u0442\u0430\u043a, \u0431\u044b\u043b\u043e \u0431\u044b \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0440.\u0432., \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u041e\u0441\u043e\u0431\u043e \u0443\u043c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043e\u0433\u043b\u0430 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430, \u043e\u0431\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a.<\/p>\n<p><em>\u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u0441 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435\u043c<\/em> (<em>backtracking with memoization<\/em>). \u041f\u043e\u0434\u0445\u043e\u0434 Perl&#8217;\u0430 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0437\u0440\u044b\u0432\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u043f\u043e\u043b\u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0439. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 Perl&#8217;\u043e\u0432\u044b\u0445 \u0440.\u0432. \u0431\u043e\u043b\u0435\u0435 \u0431\u043b\u0438\u0437\u043a\u043e\u0435 \u043a \u041d\u041a\u0410, \u0447\u0435\u043c \u043a \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443: \u043e\u043d\u0430 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0431\u044a\u0451\u043c\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0432\u043d\u044b\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0422\u0430\u043a \u0436\u0435 \u043e\u043d\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u0442\u0435\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0442\u0435\u043a\u0441\u0442\u0430: \u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430:<\/p>\n<pre><code>$ perl -e '(\"a\" x 100000) =~ \/^(ab?)*$\/;' Segmentation fault (core dumped) $ <\/code><\/pre>\n<p><em>\u0421\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430<\/em> (<em>character sets<\/em>). \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440.\u0432. \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0433\u0440\u043e\u043c\u0430\u0434\u043d\u044b\u043c\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u043d\u0435-ASCII \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u042e\u043d\u0438\u043a\u043e\u0434. <a href=\"http:\/\/swtch.com\/plan9port\/unix\/\" rel=\"noopener noreferrer nofollow\">\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0440.\u0432. \u0438\u0437 Plan 9<\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u042e\u043d\u0438\u043a\u043e\u0434\u0430, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u041d\u041a\u0410 \u0434\u043b\u044f \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u043e\u0433\u043e \u042e\u043d\u0438\u043a\u043e\u0434-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u042d\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043e\u0442\u0434\u0435\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a \u041d\u041a\u0410 \u043e\u0442 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442.\u043e. \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440.\u0432. \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0434\u043b\u044f <a href=\"http:\/\/plan9.bell-labs.com\/sys\/doc\/utf.html\" rel=\"noopener noreferrer nofollow\">UTF-8<\/a>, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0448\u0438\u0440\u043e\u043a\u0438\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438.<\/p>\n<p><a class=\"anchor\" name=\"history\" id=\"history\"><\/a><\/p>\n<h2>\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0438 \u0441\u0441\u044b\u043b\u043a\u0438<\/h2>\n<p>\u041c\u0430\u0439\u043a\u043b \u0420\u0430\u0431\u0438\u043d (Michael Rabin) \u0438 \u0414\u0430\u043d\u0430 \u0421\u043a\u043e\u0442 (Dana Scott) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0438 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0437\u043c\u0430 \u0432 1959 \u0433\u043e\u0434\u0443 [7], \u043f\u043e\u043a\u0430\u0437\u0430\u0432, \u0447\u0442\u043e \u041d\u041a\u0410 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e (\u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u044b\u043c\u0438) \u0414\u041a\u0410, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0414\u041a\u0410 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u041d\u041a\u0410. (\u041e\u043d\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u041f\u0440\u0435\u043c\u0438\u044e \u0422\u044c\u044e\u0440\u0438\u043d\u0433\u0430 \u0432 1976 \u0437\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0437\u043c\u0430 \u0432 \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435.)<\/p>\n<p>\u0420. \u041c\u0430\u043a\u041d\u043e\u0442\u043e\u043d\u0443 (R.McNaughton), \u0425. \u042f\u043c\u0430\u0434\u0435 (H.Yamada) [4] \u0438 \u041a\u0435\u043d\u0443 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0443 (Ken Thompson) [9] \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0438\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440.\u0432. \u0432 \u041d\u041a\u0410, \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0438 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0440\u0430\u0431\u043e\u0442 \u043d\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0442\u043e\u0433\u0434\u0430 \u0435\u0449\u0451 \u0437\u0430\u0440\u043e\u0436\u0434\u0430\u044e\u0449\u0443\u044e\u0441\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e \u041d\u041a\u0410. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u041c\u0430\u043a\u041d\u043e\u0442\u043e\u043d\u0430 \u0438 \u042f\u043c\u0430\u0434\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0414\u041a\u0410, \u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f IBM 7094. \u0427\u0438\u0442\u0430\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0440\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u041d\u041a\u0410, \u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u0435\u0438\u0445 \u0440\u0430\u0431\u043e\u0442. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u041d\u041a\u0410 \u0438 \u0440.\u0432. \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u043e\u043d\u0438 \u043a\u043e\u0434\u0438\u0440\u0443\u044e\u0442 \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0439 \u041d\u041a\u0410 \u0432\u044b\u0431\u043e\u0440. \u041f\u043e\u0434\u0445\u043e\u0434, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435, \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430, \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0432\u044b\u0431\u043e\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 \u0443\u0437\u043b\u044b \u044f\u0432\u043d\u043e\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430 (\u0432\u044b\u0448\u0435 \u043e\u043d\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u044b \u0443\u0437\u043b\u0430\u043c\u0438 <code>Split<\/code>) \u0438 \u043d\u0435\u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438. \u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u041c\u0430\u043a\u041d\u043e\u0442\u043e\u043d\u0443 \u0438 \u042f\u043c\u0430\u0434\u0435, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u043d\u0435\u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0435\u043b\u043e\u043a, \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0438\u0445 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c \u041d\u041a\u0410 \u0438\u043c\u0435\u0442\u044c \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439 \u043c\u0435\u0442\u043a\u043e\u0439. \u041c\u0430\u043a\u0418\u043b\u0440\u043e\u0439 (McIlroy) [3] \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Haskell.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0434\u043b\u044f \u0440.\u0432. \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0434\u043b\u044f \u0435\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 QED, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0432 \u041e\u0421 CTSS [10] \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 IBM 7094. \u041a\u043e\u043f\u0438\u044e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0430\u0440\u0445\u0438\u0432\u0430\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 CTSS [5]. \u041b. \u041f\u0438\u0442\u0435\u0440 \u0414\u0435\u0439\u0447 (L.Peter Deutsch) \u0438 \u0411\u0430\u0442\u043b\u0435\u0440 \u041b\u044d\u043c\u043f\u0441\u043e\u043d (Butler Lampson) [1] \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043f\u0435\u0440\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e QED, \u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u043f\u0435\u0440\u0432\u043e\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0440.\u0432. \u0414\u0435\u043d\u0438\u0441 \u0420\u0438\u0442\u0447\u0438 (Dennis Ritchie), \u0430\u0432\u0442\u043e\u0440 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 QED, \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0440\u0430\u043d\u043d\u044e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 QED [8]. (\u0422\u043e\u043c\u043f\u0441\u043e\u043d, \u0420\u0438\u0442\u0447\u0438 \u0438 \u041b\u044d\u043c\u043f\u0441\u043e\u043d \u043f\u043e\u0437\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u0440\u0435\u043c\u0438\u044e \u0422\u044c\u044e\u0440\u0438\u043d\u0433\u0430, \u043d\u043e \u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u043d\u0438 \u0441 QED, \u043d\u0438 \u0441 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430\u043c\u0438.)<\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u043e\u0442\u043c\u0435\u0442\u0438\u043b\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0434\u043b\u0438\u043d\u043d\u043e\u0439 \u0447\u0435\u0440\u0435\u0434\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0440.\u0432. \u0422\u043e\u043c\u043f\u0441\u043e\u043d \u0440\u0435\u0448\u0438\u043b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 ed, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Unix (1971), \u0438\u043b\u0438 \u0432 \u0435\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0435 grep, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 (1973). \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u044d\u0442\u0438 \u043f\u043e\u0447\u0442\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b Unix \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c! \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0440.\u0432. \u0431\u044b\u043b \u0432\u0435\u0441\u044c\u043c\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d: \u0432 \u043d\u0451\u043c \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043d\u0438 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043a\u0440\u0443\u0433\u043b\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438, \u043d\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <code>|<\/code>, <code>?<\/code> \u0438 <code>+<\/code>. egrep \u043e\u0442 \u0410\u043b\u0430 \u0410\u0445\u043e (Al Aho), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432 \u0441\u0435\u0434\u044c\u043c\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 (1979), \u0431\u044b\u043b \u043f\u0435\u0440\u0432\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c Unix, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0440.\u0432., \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u0435\u0434\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u0414\u041a\u0410. \u041a \u0432\u043e\u0441\u044c\u043c\u043e\u043c\u0443 \u0438\u0437\u0434\u0430\u043d\u0438\u044e (1985) egrep \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u043b \u0414\u041a\u0410 \u043d\u0430 \u043b\u0435\u0442\u0443, \u043a\u0430\u043a \u0438 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435.<\/p>\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 sam [6] \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 80\u0445, \u0420\u043e\u0431 \u041f\u0430\u0439\u043a (Rob Pike) \u0441\u043e\u0437\u0434\u0430\u043b \u043d\u043e\u0432\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0414\u044d\u0439\u0432 \u041f\u0440\u0435\u0441\u043e\u0442\u043e (Dave Presotto) \u0432\u044b\u043d\u0435\u0441 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 \u0432\u043e\u0441\u044c\u043c\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u041f\u0430\u0439\u043a\u0430 \u043f\u0440\u0438\u0432\u043d\u0435\u0441\u043b\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (submatch tracking) \u0432 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u041d\u041a\u0410, \u043d\u043e, \u043a\u0430\u043a \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0432\u043e\u0441\u044c\u043c\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438, \u043d\u0435 \u0431\u044b\u043b\u0430 \u0448\u0438\u0440\u043e\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0430. \u0421\u0430\u043c \u041f\u0430\u0439\u043a \u043d\u0435 \u0441\u043e\u0437\u043d\u0430\u0432\u0430\u043b, \u0447\u0442\u043e \u0435\u0433\u043e \u0442\u0435\u0445\u043d\u0438\u043a\u0430\u043c \u0431\u044b\u043b\u0430 \u0447\u0435\u043c-\u0442\u043e \u043d\u043e\u0432\u044b\u043c. \u0413\u0435\u043d\u0440\u0438 \u0421\u043f\u0435\u043d\u0441\u0435\u0440 (Henry Spencer) \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432\u043e\u0441\u044c\u043c\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u0441 \u043d\u0443\u043b\u044f, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c, \u0438 <a href=\"http:\/\/arglist.com\/regex\/\" rel=\"noopener noreferrer nofollow\">\u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f<\/a>. \u041e\u043d \u0441\u0442\u0430\u043b\u0430 \u043e\u0447\u0435\u043d\u044c \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u043b \u043e\u0441\u043d\u043e\u0432\u043e\u0439 \u0434\u043b\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439, \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0440\u0430\u043d\u0435\u0435: Perl, PCRE, Python \u0438 \u0442.\u0434. (\u0412 \u0441\u0432\u043e\u0451 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u0438\u0435, \u0421\u043f\u0435\u043d\u0441\u0435\u0440 \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0438 \u043d\u0435 \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b. \u041e\u043d \u0434\u0430\u0436\u0435 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438: &#171;\u041c\u043d\u043e\u0433\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043d\u0430\u0448\u043b\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u043f\u043e\u043b\u043d\u0435 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0439, \u0445\u043e\u0442\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 egrep \u043d\u0430 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u044b\u043b\u0430 \u0431\u044b \u043e\u0448\u0438\u0431\u043a\u043e\u0439.&#187;) \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440.\u0432. \u043e\u0442 \u041f\u0430\u0439\u043a\u0430, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u042e\u043d\u0438\u043a\u043e\u0434\u0430, \u0431\u044b\u043b\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c sam \u0432 <a href=\"http:\/\/groups.google.com\/group\/comp.os.research\/msg\/f1783504a2d18051\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u043d\u0446\u0435 1992<\/a>, \u043d\u043e \u043e\u0441\u043e\u0431\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0440.\u0432. \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043d\u0435\u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u043c. \u0421\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0445: \u043a\u0430\u043a <a href=\"http:\/\/plan9.bell-labs.com\/sources\/plan9\/sys\/src\/cmd\/sam\/\" rel=\"noopener noreferrer nofollow\">\u0447\u0430\u0441\u0442\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 sam<\/a>, \u043a\u0430\u043a <a href=\"http:\/\/plan9.bell-labs.com\/sources\/plan9\/sys\/src\/libregexp\/\" rel=\"noopener noreferrer nofollow\">\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0440.\u0432. \u0438\u0437 Plan 9<\/a>, \u0438\u043b\u0438 <a href=\"http:\/\/swtch.com\/plan9port\/unix\/\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0434\u043b\u044f Unix<\/a>. \u0412\u0438\u043b\u043b\u0435 \u041b\u0430\u0443\u0440\u0438\u043a\u0430\u0440\u0438 (Ville Laurikari) \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442\u043a\u0440\u044b\u043b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041f\u0430\u0439\u043a\u0430 \u0432 1999, \u0442\u0430\u043a \u0436\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0432 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 [2].<\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043b\u044e\u0431\u043e\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u0440.\u0432. \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u043c \u0431\u0435\u0437 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u043a\u043d\u0438\u0433\u0438 \u0414\u0436\u0435\u0444\u0444\u0440\u0438 \u0424\u0440\u0438\u0434\u043b\u0430 (Jeffrey Friedl) &#171;Mastering Regula Expressions&#187;, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u0441\u0440\u0435\u0434\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432. \u041a\u043d\u0438\u0433\u0430 \u0424\u0440\u0438\u0434\u043b\u0430 \u0443\u0447\u0438\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440.\u0432., \u043d\u043e \u043d\u0435 \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445. \u0422\u043e\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0443\u0432\u0435\u043a\u043e\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0448\u0438\u0440\u043e\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u041d\u041a\u0410.<\/p>\n<p><a class=\"anchor\" name=\"summary\" id=\"summary\"><\/a><\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u0438\u0439. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u043e\u043c\u0443, Perl, PCRE, Python, Ruby, Java \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u044f\u0437\u044b\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c (recursive backtracking), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438, \u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043c\u0443\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c\u0438. \u0417\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a (backreferences), \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c\u0438 \u044d\u0442\u0438\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438, \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u0432, \u043f\u0440\u0438\u0447\u0451\u043c \u0441\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u043c\u0438 \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044f\u043c\u0438.<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0432 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438, &#171;<a href=\"https:\/\/swtch.com\/~rsc\/regexp\/regexp2.html\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c: \u041f\u043e\u0434\u0445\u043e\u0434 \u0441 \u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u041c\u0430\u0448\u0438\u043d\u043e\u0439<\/a>&#171;, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044e \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (submatch extraction) \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u041d\u041a\u0410. \u0422\u0440\u0435\u0442\u044c\u044f \u0441\u0442\u0430\u0442\u044c\u044f, &#171;<a href=\"https:\/\/swtch.com\/~rsc\/regexp\/regexp3.html\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0438\u043a\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435<\/a>&#187; \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0427\u0435\u0442\u0432\u0451\u0440\u0442\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f, &#171;<a href=\"https:\/\/swtch.com\/~rsc\/regexp\/regexp4.html\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0440\u0438\u0433\u0440\u0430\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/a>&#171;, \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d Google Code Search.<\/p>\n<p><a class=\"anchor\" name=\"ack\" id=\"ack\"><\/a><\/p>\n<h2>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438<\/h2>\n<p>Lee Feigenbaum, James Grimmelmann, Alex Healy, William Josephson, \u0438 Arnold Robbins \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438 \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439. Rob Pike \u0440\u0430\u0437\u044a\u044f\u0441\u043d\u0438\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0438\u043c \u0432\u0441\u0435\u043c.<\/p>\n<p><a class=\"anchor\" name=\"refs\" id=\"refs\"><\/a><\/p>\n<h2>\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a<\/h2>\n<p>[1] L. Peter Deutsch and Butler Lampson, \u201cAn online editor,\u201d Communications of the ACM 10(12) (December 1967), pp. 793\u2013799. <a href=\"http:\/\/doi.acm.org\/10.1145\/363848.363863\" rel=\"noopener noreferrer nofollow\">http:\/\/doi.acm.org\/10.1145\/363848.363863<\/a><\/p>\n<p>[2] Ville Laurikari, \u201cNFAs with Tagged Transitions, their Conversion to Deterministic Automata and Application to Regular Expressions,\u201d in Proceedings of the Symposium on String Processing and Information Retrieval, September 2000. <a href=\"http:\/\/laurikari.net\/ville\/spire2000-tnfa.ps\" rel=\"noopener noreferrer nofollow\">http:\/\/laurikari.net\/ville\/spire2000-tnfa.ps<\/a><\/p>\n<p>[3] M. Douglas McIlroy, \u201cEnumerating the strings of regular languages,\u201d Journal of Functional Programming 14 (2004), pp. 503\u2013518. <a href=\"http:\/\/www.cs.dartmouth.edu\/~doug\/nfa.ps.gz\" rel=\"noopener noreferrer nofollow\">http:\/\/www.cs.dartmouth.edu\/~doug\/nfa.ps.gz<\/a> (preprint)<\/p>\n<p>[4] R. McNaughton and H. Yamada, \u201cRegular expressions and state graphs for automata,\u201d IRE Transactions on Electronic Computers EC-9(1) (March 1960), pp. 39\u201347.<\/p>\n<p>[5] Paul Pierce, \u201cCTSS source listings.\u201d <a href=\"http:\/\/www.piercefuller.com\/library\/ctss.html\" rel=\"noopener noreferrer nofollow\">http:\/\/www.piercefuller.com\/library\/ctss.html<\/a> (Thompson&#8217;s QED is in the file com5 in the source listings archive and is marked as 0QED)<\/p>\n<p>[6] Rob Pike, \u201cThe text editor sam,\u201d Software\u2014Practice &amp; Experience 17(11) (November 1987), pp. 813\u2013845. <a href=\"http:\/\/plan9.bell-labs.com\/sys\/doc\/sam\/sam.html\" rel=\"noopener noreferrer nofollow\">http:\/\/plan9.bell-labs.com\/sys\/doc\/sam\/sam.html<\/a><\/p>\n<p>[7] Michael Rabin and Dana Scott, \u201cFinite automata and their decision problems,\u201d IBM Journal of Research and Development 3 (1959), pp. 114\u2013125. <a href=\"http:\/\/www.research.ibm.com\/journal\/rd\/032\/ibmrd0302C.pdf\" rel=\"noopener noreferrer nofollow\">http:\/\/www.research.ibm.com\/journal\/rd\/032\/ibmrd0302C.pdf<\/a><\/p>\n<p>[8] Dennis Ritchie, \u201cAn incomplete history of the QED text editor.\u201d <a href=\"http:\/\/plan9.bell-labs.com\/~dmr\/qed.html\" rel=\"noopener noreferrer nofollow\">http:\/\/plan9.bell-labs.com\/~dmr\/qed.html<\/a><\/p>\n<p>[9] Ken Thompson, \u201cRegular expression search algorithm,\u201d Communications of the ACM 11(6) (June 1968), pp. 419\u2013422. <a href=\"http:\/\/doi.acm.org\/10.1145\/363347.363387\" rel=\"noopener noreferrer nofollow\">http:\/\/doi.acm.org\/10.1145\/363347.363387<\/a> (PDF)<\/p>\n<p>[10] Tom Van Vleck, \u201cThe IBM 7094 and CTSS.\u201d <a href=\"http:\/\/www.multicians.org\/thvv\/7094.html\" rel=\"noopener noreferrer nofollow\">http:\/\/www.multicians.org\/thvv\/7094.html<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><\/p>\n<div class=\"tm-article-poll-container\"><!--[--><\/p>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/articles\/756806\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u0412\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0440\u0451\u0445 \u0447\u0430\u0441\u0442\u0435\u0439?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">93.02% <\/span><span class=\"tm-article-poll__answer-label\">\u0414\u0430<\/span><span class=\"tm-article-poll__answer-votes\">40<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 93.02%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">6.98% <\/span><span class=\"tm-article-poll__answer-label\">\u041d\u0435\u0442, \u0441\u0430\u043c \u043f\u043e\u0447\u0438\u0442\u0430\u044e \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0435<\/span><span class=\"tm-article-poll__answer-votes\">3<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 6.98%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 43 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.    \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 11 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. <\/div>\n<p><!--]--><\/div>\n<p><!--]--><\/div>\n<p> \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\/756806\/\"> https:\/\/habr.com\/ru\/articles\/756806\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>&#8230; \u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 Java, Perl, PHP, Python, Ruby, &#8230;<\/h2>\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=\"#intro\" rel=\"noopener noreferrer nofollow\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#re\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#fa\" rel=\"noopener noreferrer nofollow\">\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#conv\" rel=\"noopener noreferrer nofollow\">\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432 \u041d\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#search_algos\" rel=\"noopener noreferrer nofollow\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#impl\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#impl_compiling\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432 \u041d\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#impl_simulating\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f: \u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u041d\u041a\u0410<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#perf\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#caching\" rel=\"noopener noreferrer nofollow\">\u041a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u041d\u041a\u0410 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0414\u041a\u0410<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#real_regex\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#history\" rel=\"noopener noreferrer nofollow\">\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0438 \u0441\u0441\u044b\u043b\u043a\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#summary\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#ack\" rel=\"noopener noreferrer nofollow\">\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#refs\" rel=\"noopener noreferrer nofollow\">\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<hr\/>\n<p><a class=\"anchor\" name=\"intro\" id=\"intro\"><\/a><\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0451\u0442 \u043e \u0434\u0432\u0443\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u0445 \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0440.\u0432.). \u041e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u0438\u0440\u043e\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u043c \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430\u0445 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f Perl. \u0414\u0440\u0443\u0433\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u043c\u0438 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 awk \u0438 grep. \u0423 \u044d\u0442\u0438\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f  \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 .<\/p>\n<figure class=\"\">\n<div><figcaption>\u0413\u0440\u0430\u0444\u0438\u043a \u0434\u043b\u044f Perl<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\">\n<div><figcaption>\u0413\u0440\u0430\u0444\u0438\u043a \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043d\u043e\u0442\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439  \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f . \u041d\u0430 \u043e\u0431\u043e\u0438\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043e \u0432\u0440\u0435\u043c\u044f, \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0435 \u043a\u0430\u0436\u0434\u044b\u043c \u0438\u0437 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432, \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e  \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 .<\/p>\n<p>\u041e\u0442\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e Perl \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 60 \u0441\u0435\u043a\u0443\u043d\u0434 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c 29-\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043a &#171;\u041d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0410\u0432\u0442\u043e\u043c\u0430\u0442 (\u041d\u041a\u0410) \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430&#187; \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u044b \u043f\u043e\u0437\u0436\u0435, \u0442\u0440\u0435\u0431\u0443\u0435\u0442 20 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434 \u0434\u043b\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438. \u0418 \u044d\u0442\u043e \u043d\u0435 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430. \u0412 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0434\u043b\u044f Perl \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445, \u0430 \u0432 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0434\u043b\u044f \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 &#8212; \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445: \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0432 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0440\u0430\u0437 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c Perl \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u043e\u0439 29-\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435. \u042d\u0442\u0430 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u043f\u0440\u043e\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430: \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 200-\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043c\u0435\u043d\u0435\u0435, \u0447\u0435\u043c \u0437\u0430 200 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f,  \u043a\u0430\u043a Perl&#8217;\u0443 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0431\u044b \u0431\u043e\u043b\u0435\u0435 1015 \u043b\u0435\u0442. (Perl &#8212; \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u043e\u0442 \u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c; \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0432\u044b\u0448\u0435 \u043c\u043e\u0433 \u0431\u044b\u0442\u044c \u0438 Python \u0438\u043b\u0438 PHP, \u0438\u043b\u0438 Ruby, \u0438\u043b\u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u044f\u0437\u044b\u043a\u0438. \u0411\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a, \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0434\u0430\u043b\u0435\u0435, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439.)<\/p>\n<p>\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e \u043f\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c: \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 Perl \u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439. \u041f\u043e \u0444\u0430\u043a\u0442\u0443, \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0440.\u0432. \u0432 Perl \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u0439. \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0433\u0440\u0430\u0444\u0438\u043a, \u0432 Perl \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0442.\u043d. &#171;\u043f\u0430\u0442\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435&#187; \u0440.\u0432., \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c-\u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430 \u043d\u0435\u0442 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0431\u044b \u043f\u0430\u0442\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438. \u041f\u0440\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441: \u043f\u043e\u0447\u0435\u043c\u0443 Perl \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 \u041d\u041a\u0410 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430? \u0410 \u0432\u0435\u0434\u044c \u043c\u043e\u0436\u0435\u0442, \u0438 \u0435\u043c\u0443 \u0431\u044b \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0440.\u0432. \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0442\u0435\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c. \u0420.\u0432. \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u043d\u043e \u041a\u0435\u043d \u0422\u043e\u043c\u043f\u0441\u043e\u043d (Ken Thompson) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b \u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c \u0432 \u0432\u0438\u0434\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 QED \u0434\u043b\u044f \u041e\u0421 CTSS. \u0414\u0435\u043d\u0438\u0441 \u0420\u0438\u0442\u0447\u0438 (Dennis Ritchie) \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0432 \u0441\u0432\u043e\u0435\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 QED \u0434\u043b\u044f GE-TSS. \u0422\u043e\u043c\u043f\u0441\u043e\u043d \u0438 \u0420\u0438\u0442\u0447\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c Unix, \u0438 \u0432\u0437\u044f\u043b\u0438 \u0440.\u0432. \u0441 \u0441\u043e\u0431\u043e\u0439. \u041a \u043f\u043e\u0437\u0434\u043d\u0438\u043c 70\u044b\u043c, \u0440.\u0432. \u0431\u044b\u043b\u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0435 Unix, \u0432 \u0442\u0430\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445, \u043a\u0430\u043a ed, grep, egrep, awk \u0438 lex.<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0438 \u0434\u043d\u0438 \u0440.\u0432. \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0442\u0435\u043e\u0440\u0438\u0438 \u0432\u0435\u0434\u0451\u0442 \u043a \u043f\u043b\u043e\u0445\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440.\u0432., \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0432 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445, \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0442\u0435\u0445, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445 Unix \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u0438\u043b\u0435\u0442\u043d\u0435\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0431\u0437\u043e\u0440 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0442\u0435\u043e\u0440\u0438\u0438: \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u044b \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0440.\u0432., \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0451\u043d\u043d\u044b\u0439 \u041a\u0435\u043d\u043e\u043c \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u043e\u043c \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 60\u0445. \u0422\u0430\u043a\u0436\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c \u0442\u0435\u043e\u0440\u0438\u044e \u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0422\u043e\u043c\u043f\u0441\u043e\u043d\u0430. \u042d\u0442\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u0432 400 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u043d\u0430 \u0421\u0438, \u0431\u0435\u0436\u0438\u0442 \u0433\u043e\u043b\u043e\u0432\u0430 \u043a \u0433\u043e\u043b\u043e\u0432\u0435 \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 Perl. \u041e\u043d\u0430 \u043e\u0431\u0433\u043e\u043d\u044f\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 Perl&#8217;\u043e\u043c, Python&#8217;\u043e\u043c, PCRE \u0438 \u043f\u0440\u043e\u0447\u0438\u043c\u0438. \u0421\u0442\u0430\u0442\u044c\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0442\u0435\u043e\u0440\u0438\u044f \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0430 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435.<\/p>\n<p><a class=\"anchor\" name=\"re\" id=\"re\"><\/a><\/p>\n<h2>\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f &#8212; \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043d\u043e\u0442\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a. \u041a\u043e\u0433\u0434\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0434\u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u043e\u0434 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0440.\u0432., \u043c\u044b \u0447\u0430\u0441\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 (\u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f) \u0441 \u0440.\u0432.<\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0435 \u0440.\u0432. &#8212; \u044d\u0442\u043e \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b. \u0417\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u0430\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 , , , , , , \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u0441\u0430\u043c\u0438 \u0441\u043e\u0431\u043e\u0439. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u0430\u0441\u0438\u043c\u0432\u043e\u043b, \u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u043a\u043e\u0441\u043e\u0439 \u0447\u0435\u0440\u0442\u043e\u0439 (backslash):  \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c &#171;\u043f\u043b\u044e\u0441&#187;.<\/p>\n<p>\u0414\u0432\u0430 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0447\u0435\u0440\u0435\u0437 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0418 (<em>\u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f<\/em>) \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0418\u041b\u0418 (<em>\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b<\/em>, <em>\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0432\u044b\u0431\u043e\u0440\u0430<\/em>) \u0432 \u0432\u0438\u0434\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f: \u0435\u0441\u043b\u0438  \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>s<\/code>, \u0430  \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>t<\/code>, \u0442\u043e\u0433\u0434\u0430  \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>s<\/code> \u0438\u043b\u0438 \u0441 <code>t<\/code>, \u0430  \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>st<\/code>.<\/p>\n<p>\u041c\u0435\u0442\u0430\u0441\u0438\u043c\u0432\u043e\u043b\u044b ,  \u0438  \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439:  \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437 \u043d\u0443\u043b\u044f \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u043a, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 ;  \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438;  \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043d\u0443\u043b\u0451\u043c \u0438\u043b\u0438 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438.<\/p>\n<p>\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u043e\u0442 \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u043c\u0443 \u043a \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u043c\u0443: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430, \u043f\u043e\u0442\u043e\u043c \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f, \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f. \u042f\u0432\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430, \u043a\u0430\u043a \u0432 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432:  \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043e\u043c ; \u0430  &#8212; .<\/p>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0440.\u0432. \u0432 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0439 Unix \u0443\u0442\u0438\u043b\u0438\u0442\u0435 egrep. \u042d\u0442\u043e \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u043c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438. \u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u044f\u0437\u044b\u043a &#8212; \u044d\u0442\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u043a\u0441\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u043f\u0430\u043c\u044f\u0442\u0438. \u0411\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u043e\u0442\u043c\u0435\u0442\u0438\u043c Perl \u0438 \u0442\u0435\u0445, \u043a\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043e) \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 <a href=\"http:\/\/www.perl.com\/doc\/manual\/html\/pod\/perlre.html\" rel=\"noopener noreferrer nofollow\">\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0438 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439<\/a>. \u042d\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0440.\u0432. \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c\u0438 \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u0442\u0440\u0443\u0434\u043d\u043e \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c\u0438, \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438: \u044d\u0442\u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u043d\u043e\u0432\u044b\u0435 \u0440.\u0432. \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u044e\u0442 \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u0432 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0435.<\/p>\n<p>\u041e\u0434\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0440.\u0432., \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <em>\u043e\u0431\u0440\u0430\u0442\u043d\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438<\/em> (<em>backreferences<\/em>). \u041e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a  \u0438\u043b\u0438  \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043d\u0438\u043c:  \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>catcat<\/code> \u0438 <code>dogdog<\/code>, \u043d\u043e \u043d\u0435 \u0441 <code>catdog<\/code> \u0438\u043b\u0438 <code>dogcat<\/code>. \u0427\u0442\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u0442\u043e \u0440.\u0432. \u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0440.\u0432. \u0417\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043e\u0440\u043e\u0433\u043e \u043f\u043b\u0430\u0442\u0438\u0442\u044c: \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0441 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0442\u0435\u043c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 Perl. Perl (\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u044f\u0437\u044b\u043a\u0438) \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0443\u0436\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0440.\u0432., \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0432\u044b\u0448\u0435, \u043d\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u043e\u0431 \u044d\u0442\u0438\u0445 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445.<\/p>\n<p><a class=\"anchor\" name=\"fa\" id=\"fa\"><\/a><\/p>\n<h2>\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442<\/h2>\n<p>\u0414\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u0432. \u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 (finite automata), \u0442\u0430\u043a \u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043a\u0430\u043a \u043c\u0430\u0448\u0438\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 (state machine), \u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d\u044b &#171;\u0430\u0432\u0442\u043e\u043c\u0430\u0442&#187; \u0438 &#171;\u043c\u0430\u0448\u0438\u043d\u0430&#187;, \u043a\u0430\u043a \u0432\u0437\u0430\u0438\u043c\u043e\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435. (\u041f\u0440\u0438\u043c: \u0432 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 &#171;\u043c\u0430\u0448\u0438\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439&#187; \u0440\u0435\u0434\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u043e\u0432\u043e &#171;\u0430\u0432\u0442\u043e\u043c\u0430\u0442&#187;, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f &#171;\u0414\u041a\u0410&#187; (\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442, \u0430\u043d\u0433\u043b. DFA) \u0438 &#171;\u041d\u041a\u0410&#187; (\u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442, \u0430\u043d\u0433\u043b. NFA))<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u044e\u0449\u0438\u0439 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0440.\u0432. .<\/p>\n<figure class=\"\">\n<div><figcaption>\u0414\u041a\u0410 \u0434\u043b\u044f a(bb)+a<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0441\u0432\u043e\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0451\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438. (\u0427\u0438\u0441\u043b\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 &#8212; \u044d\u0442\u043e \u043c\u0435\u0442\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0449\u0435; \u043e\u043d\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430.) \u041f\u043e \u043c\u0435\u0440\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0423 \u044d\u0442\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0434\u0432\u0430 \u043e\u0441\u043e\u0431\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f: \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (start state) , \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f (match state) . \u041d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 (\u0432\u0435\u0434\u0443\u0449\u0438\u0435 \u0438\u0437 \u043d\u0438\u043e\u0442\u043a\u0443\u0434\u0430), \u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u043e\u0439\u043d\u044b\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438.<\/p>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0443 \u0437\u0430 \u0440\u0430\u0437. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>abbbba<\/code>. \u041a\u043e\u0433\u0434\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u0443\u044e \u0431\u0443\u043a\u0432\u0443 \u0441\u0442\u0440\u043e\u043a\u0438 (<code>a<\/code>), \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 . \u041e\u043d \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u0435 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 . \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0441\u0442\u0440\u043e\u043a\u0438: \u0447\u0438\u0442\u0430\u044f \u0441\u0438\u043c\u0432\u043e\u043b <code>b<\/code> \u043e\u043d \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 , <code>b<\/code> &#8212; , \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 <code>b<\/code> &#8212; \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 , \u043f\u043e\u0442\u043e\u043c \u043f\u043e <code>b<\/code> \u0441\u043d\u043e\u0432\u0430 \u0432 , \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u0430\u043a\u0438 \u0447\u0438\u0442\u0430\u044f <code>a<\/code> \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 .<\/p>\n<figure class=\"\">\n<div><figcaption>\u0420\u0430\u0431\u043e\u0442\u0430 \u0414\u041a\u0410 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 abbbba<\/figcaption><\/div>\n<\/figure>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 , \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u043d \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 (\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442) \u0441\u0442\u0440\u043e\u043a\u0443. \u0415\u0441\u043b\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0442\u043e \u043e\u043d \u043d\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 (\u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442) \u0441\u0442\u0440\u043e\u043a\u0443. \u0415\u0441\u043b\u0438 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u0443, \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u043f\u0440\u0435\u0436\u0434\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <em>\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c<\/em> (<em>\u0414\u041a\u0410<\/em>, \u0430\u043d\u0433\u043b. <em>Deterministic Finite Automata<\/em>, <em>DFA<\/em>), \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0432\u0435\u0434\u0451\u0442 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435, \u0447\u0435\u043c \u0432 \u043e\u0434\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e, \u043d\u043e \u0443\u0436\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c:<\/p>\n<figure class=\"\">\n<div><figcaption>\u041d\u041a\u0410 \u0434\u043b\u044f a(bb)+a<\/figcaption><\/div>\n<\/figure>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043e\u043d \u0447\u0438\u0442\u0430\u0435\u0442 <code>b<\/code>, \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 , \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f: \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0432  \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c <code>bb<\/code>, \u0438\u043b\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432  \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0435\u0435 <code>a<\/code>. \u0422\u0430\u043a \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432\u043f\u0435\u0440\u0451\u0434, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0441\u0442\u0440\u043e\u043a\u0438, \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442<\/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-353126","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/353126","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=353126"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/353126\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=353126"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=353126"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=353126"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}