Ҷустуҷӯи ҳама мувофиқатҳои регекс ҳамеша O(n²) буд | Mewayz Blog Skip to main content
Hacker News

Ҷустуҷӯи ҳама мувофиқатҳои регекс ҳамеша O(n²) буд

Шарҳҳо

2 min read Via iev.ee

Mewayz Team

Editorial Team

Hacker News

Арзиши пинҳонии мувофиқати намуна

Барои таҳиягарон, ифодаҳои муқаррарӣ (regex) як абзори зарурӣ, як корди артиши Швейтсария барои таҳлил, тасдиқ ва истихроҷи маълумот аз матн мебошанд. Аз тафтиши форматҳои почтаи электронӣ то скан кардани маълумот аз гузоришҳо, regex роҳи ҳалли он аст. Аммо, дар зери ин фасади пуриқтидор як доми иҷроишҳост, ки дар тӯли даҳсолаҳо системаҳоро ранҷ мебурд: бадтарин мушкилии вақти дарёфти ҳама мувофиқатҳо дар сатр O(n²) аст. Ин мураккабии вақти квадратӣ маънои онро дорад, ки вақте ки сатри воридотӣ ба таври хаттӣ афзоиш меёбад, вақти коркард метавонад ба таври экспоненсиалӣ афзоиш ёбад, ки боиси сустшавии ғайричашмдошт, тамомшавии захираҳо ва падидае гардад, ки бо номи ReDoS (Regular Expression Deial of Deial of Service) маълум аст. Фаҳмидани ин маҳдудияти хос қадами аввал дар роҳи сохтани барномаҳои мустаҳкам ва муассир аст.

Чаро Regex Matching O(n²) аст? Мушкилоти ақибнишинӣ

Решаи мураккабии O(n²) дар механизмест, ки аксари муҳаррикҳои анъанавии регекс истифода мебаранд: бозгашт. Вақте ки муҳаррики regex, ба монанди муҳаррики Perl, Python ё Java, кӯшиш мекунад, ки ҳамаи мувофиқатҳои имконпазирро пайдо кунад, он сатрро як маротиба скан намекунад. Он роҳҳои гуногунро меомӯзад. Намунаи оддиеро, ба мисли `(a+)+b`, ба сатри асосан аз "a"s, ба мисли "aaaaaaaaac" истифода баред, баррасӣ кунед. Муҳаррик ба ҳама "a"-ҳо бо ҳарфи аввал `a+` мувофиқат мекунад ва сипас кӯшиш мекунад, ки ба "b"-и ниҳоӣ мувофиқат кунад. Вақте ки он ноком мешавад, он бозмегардад - ба "a"-и охирин мувофиқат намекунад ва миқдорбандии `+`-ро дар гурӯҳи берунӣ месанҷад. Ин раванд такрор мешавад ва муҳаррикро маҷбур мекунад, ки ҳар як комбинатсияи имконпазирро дар бораи гурӯҳбандӣ кардани "a" кӯшиш кунад, ки боиси таркиши комбинатории имкониятҳо мегардад. Шумораи роҳҳое, ки муҳаррик бояд таҳқиқ кунад, метавонад ба квадрати дарозии сатр мутаносиб бошад, аз ин рӯ O(n²).

  • Кантификаторҳои тамаъкор: Намунаҳо ба монанди `.*` ё `.+` дар аввал ҳарчи бештари матнро истеъмол мекунанд, ки ҳангоми мувофиқат накардани қисмҳои минбаъдаи намуна боиси бозгашти васеъ мегардад.
  • Кантификаторҳои дохилшуда: Ифодаҳо ба монанди `(a+)+` ё `(a*a*)*` шумораи экспоненсиалии роҳҳои тақсим кардани сатри вурудро эҷод мекунанд ва вақти коркардро ба таври назаррас зиёд мекунанд.
  • Намунаҳои номуайян: Ҳангоме ки сатрро бо якчанд роҳҳои такроршаванда мувофиқ кардан мумкин аст, муҳаррик бояд ҳар як имкони пайдо кардани ҳамаи мувофиқатҳоро тафтиш кунад.

Таъсири воқеии ҷаҳон: бештар аз сустшавӣ

Ин танҳо як нигаронии илмӣ нест. Регекси бесамар метавонад дар муҳити истеҳсолӣ оқибатҳои вазнин дошта бошад. Санҷиши ба назар безарар будани тасдиқи додаҳо метавонад ҳангоми коркарди файлҳои калон ё коркарди ҳаҷми зиёди вуруди корбар ба монеа табдил ёбад. Натиҷаи хатарноктарин ҳамлаи ReDoS мебошад, ки дар он як актёри бадхоҳ як сатри бодиққат таҳияшударо таъмин мекунад, ки кори бадтаринро дар regex-и замимаи веб ба таври муассир овезон мекунад ва онро барои корбарони қонунӣ дастнорас мекунад. Барои тиҷорат, ин бевосита ба бекористӣ, даромади аз даст рафта ва обрӯи осебдида табдил меёбад. Ҳангоми сохтани системаҳои мураккаб, махсусан системаҳое, ки маълумоти нобоварро коркард мекунанд, огоҳӣ аз ин домҳои regex як қисми муҳими аудити амният ва иҷроиш аст.

"Мо боре як навсозии конфигуратсияи ночиз доштем, ки регексро барои таҳлили сатрҳои корбар-агент ҷорӣ мекард. Дар ҳолати сарбории муқаррарӣ, ин хуб буд. Аммо ҳангоми афзоиши трафик он нокомии пай дар пайро ба вуҷуд овард, ки API-и моро барои дақиқаҳо бекор кард. Гунаҳкор як регекси O(n²) буд, ки мо ҳеҷ гоҳ намедонистем." - Муҳандиси калони DevOps

Сохтани системаҳои донотар бо Mewayz

Пас, чӣ гуна мо аз ин маҳдудияти асосӣ берун меравем? Ҳалли маҷмӯи асбобҳои беҳтар ва интихоби оқилонаи меъмориро дар бар мегирад. Аввалан, таҳиягарон метавонанд таҳлилгари регексро барои муайян кардани намунаҳои мушкилот истифода баранд ва онҳоро аз нав сабт кунанд, то самараноктар бошанд (масалан, бо истифода аз миқдорҳои соҳибихтисос ё гурӯҳҳои атомӣ). Барои иҷрои ниҳоӣ, алгоритмҳои алтернативӣ мавҷуданд, ки вақти хатиро кафолат медиҳанд, O(n) барои мувофиқати намуна, ҳарчанд онҳо дар китобхонаҳои стандартӣ камтар маъмуланд.

Ин аст, ки OS-и бизнеси модулӣ ба монанди Mewayz бартарии назаррас медиҳад. Mewayz ба шумо имкон медиҳад, ки равандҳои муҳимро тақсим кунед ва назорат кунед. Ба ҷои доштани як барномаи монолитӣ, ки дар он як регекси суст метавонад тамоми системаро вайрон кунад, шумо метавонед як хидмати махсус ва ҷудошударо барои таҳлил ва тасдиқи додаҳо ҷойгир кунед. Агар масъалаи иҷроиш ба миён ояд, он дарбар гирифта мешавад ва онро бидуни таъсир ба дигар амалиётҳои тиҷоратӣ ҳал кардан мумкин аст. Ғайр аз он, асбобҳои мушоҳидашаванда дар платформаи Mewayz метавонанд ба шумо кӯмак расонанд, ки ин бесамарҳоро пеш аз он ки онҳо ба мизоҷони шумо таъсир расонанд, муайян кунед ва бӯҳрони эҳтимолиро ба вазифаи оптимизатсияи идорашаванда табдил диҳед. Бо бунёди таҳкурсии чандир ва мушоҳидашаванда, шумо кафолат медиҳед, ки мантиқи тиҷоратии шумо, аз ҷумла коркарди мураккаби матн, иҷрошаванда ва устувор боқӣ мемонад.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

Саволҳои зуд-зуд додашаванда

Арзиши пинҳонии мувофиқати намуна

Барои таҳиягарон, ифодаҳои муқаррарӣ (regex) як абзори зарурӣ, як корди артиши Швейтсария барои таҳлил, тасдиқ ва истихроҷи маълумот аз матн мебошанд. Аз тафтиши форматҳои почтаи электронӣ то скан кардани маълумот аз гузоришҳо, regex роҳи ҳалли он аст. Аммо, дар зери ин фасади пуриқтидор як доми иҷроишҳост, ки дар тӯли даҳсолаҳо системаҳоро ранҷ мебурд: бадтарин мушкилии вақти дарёфти ҳама мувофиқатҳо дар сатр O(n²) аст. Ин мураккабии вақти квадратӣ маънои онро дорад, ки вақте ки сатри воридотӣ ба таври хаттӣ афзоиш меёбад, вақти коркард метавонад ба таври экспоненсиалӣ афзоиш ёбад, ки боиси сустшавии ғайричашмдошт, тамом шудани захираҳо ва падидае, ки бо номи ReDoS (Regular Expression Deial of Denial of Service) маъруф аст, гардад. Фаҳмидани ин маҳдудияти хос қадами аввал дар роҳи сохтани барномаҳои мустаҳкам ва муассир аст.

Чаро Regex Matching O(n²) аст? Мушкилоти ақибнишинӣ

Решаи мураккабии O(n²) дар механизмест, ки аксари муҳаррикҳои анъанавии регекс истифода мебаранд: бозгашт. Вақте ки муҳаррики regex, ба монанди муҳаррики Perl, Python ё Java, кӯшиш мекунад, ки ҳамаи мувофиқатҳои имконпазирро пайдо кунад, он сатрро як маротиба скан намекунад. Он роҳҳои гуногунро меомӯзад. Намунаи оддиеро, ба мисли `(a+)+b`, ба сатри асосан аз "a"s, ба мисли "aaaaaaaaac" истифода баред, баррасӣ кунед. Муҳаррик ба ҳама "a"-ҳо бо ҳарфи аввал `a+` мувофиқат мекунад ва сипас кӯшиш мекунад, ки ба "b"-и ниҳоӣ мувофиқат кунад. Вақте ки он ноком мешавад, он бозмегардад - ба "a"-и охирин мувофиқат намекунад ва миқдорбандии `+`-ро дар гурӯҳи берунӣ месанҷад. Ин раванд такрор мешавад ва муҳаррикро маҷбур мекунад, ки ҳар як комбинатсияи имконпазирро дар бораи гурӯҳбандӣ кардани "a" кӯшиш кунад, ки боиси таркиши комбинатории имкониятҳо мегардад. Шумораи роҳҳое, ки муҳаррик бояд таҳқиқ кунад, метавонад ба квадрати дарозии сатр мутаносиб бошад, аз ин рӯ O(n²).

Таъсири воқеии ҷаҳон: бештар аз сустшавӣ

Ин танҳо як нигаронии илмӣ нест. Регекси бесамар метавонад дар муҳити истеҳсолӣ оқибатҳои вазнин дошта бошад. Санҷиши ба назар безарар будани тасдиқи додаҳо метавонад ҳангоми коркарди файлҳои калон ё коркарди ҳаҷми зиёди вуруди корбар ба монеа табдил ёбад. Натиҷаи хатарноктарин ҳамлаи ReDoS мебошад, ки дар он як актёри бадхоҳ як сатри бодиққат таҳияшударо таъмин мекунад, ки кори бадтаринро дар regex-и замимаи веб ба таври муассир овезон мекунад ва онро барои корбарони қонунӣ дастнорас мекунад. Барои тиҷорат, ин бевосита ба бекористӣ, даромади аз даст рафта ва обрӯи осебдида табдил меёбад. Ҳангоми сохтани системаҳои мураккаб, махсусан системаҳое, ки маълумоти нобоварро коркард мекунанд, огоҳӣ аз ин домҳои regex як қисми муҳими аудити амният ва иҷроиш аст.

Сохтани системаҳои оқилтар бо Mewayz

Пас, чӣ гуна мо аз ин маҳдудияти асосӣ берун меравем? Ҳалли маҷмӯи асбобҳои беҳтар ва интихоби оқилонаи меъмориро дар бар мегирад. Аввалан, таҳиягарон метавонанд таҳлилгари регексро барои муайян кардани намунаҳои мушкилот истифода баранд ва онҳоро аз нав сабт кунанд, то самараноктар бошанд (масалан, бо истифода аз миқдорҳои соҳибихтисос ё гурӯҳҳои атомӣ). Барои иҷрои ниҳоӣ, алгоритмҳои алтернативӣ мавҷуданд, ки вақти хатиро кафолат медиҳанд, O(n) барои мувофиқати намуна, ҳарчанд онҳо дар китобхонаҳои стандартӣ камтар маъмуланд.

Имрӯз OS тиҷорати худро созед

Аз фрилансерҳо то агентиҳо, Mewayz зиёда аз 138,000 корхонаҳоро бо 208 модули ҳамгирошуда қудрат медиҳад. Бепул оғоз кунед, вақте ки шумо калон мешавед, навсозӣ кунед.

Ҳисоби ройгон эҷод кунед →

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 6,208+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 6,208+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime