Kupeza machesi onse a regex kwakhala O(n²) | Mewayz Blog Skip to main content
Hacker News

Kupeza machesi onse a regex kwakhala O(n²)

Ndemanga

7 min read Via iev.ee

Mewayz Team

Editorial Team

Hacker News

Mtengo Wobisika Wofananitsa Zitsanzo

Kwa Madivelopa, mawu okhazikika (regex) ndi chida chofunikira kwambiri, mpeni wa Gulu Lankhondo la Swiss pofotokozera, kutsimikizira, ndi kuchotsa zidziwitso pamawu. Kuchokera poyang'ana mafomu a imelo mpaka kuchotsa deta kuchokera ku zipika, regex ndiyo njira yothetsera. Komabe, pansi pa chithunzi champhamvuchi pali msampha wochita bwino womwe wasautsa machitidwe kwazaka zambiri: nthawi yovuta kwambiri yopeza machesi onse mu chingwe ndi O(n²). Kuvuta kwa nthawi ya quadratic kumatanthauza kuti pamene chingwe cholowetsa chikukula motsatira, nthawi yokonzekera ikhoza kukula mofulumira, zomwe zimapangitsa kuti pakhale kuchepa kosayembekezereka, kutaya kwazinthu, ndi chodabwitsa chotchedwa ReDoS (Regular Expression Denial of Service). Kumvetsetsa malire awa ndi sitepe yoyamba yopangira mapulogalamu amphamvu komanso oyenerera.

Chifukwa chiyani Regex Matching O(n²)? Vuto Lobwerera Mmbuyo

Muzu wa zovuta za O(n²) uli m'makina omwe injini zama regex amagwiritsa ntchito: kubwerera m'mbuyo. Injini ya regex, ngati yomwe ili ku Perl, Python, kapena Java, ikuyesera kupeza machesi onse omwe angathe, simangoyang'ana chingwecho kamodzi. Imafufuza njira zosiyanasiyana. Ganizirani njira yosavuta ngati `(a+)+b` yogwiritsidwa ntchito pazingwe zambiri za "a", monga "aaaaaaaaac". Injini mwadyera imagwirizana ndi "a" onse ndi `a +` woyamba, kenako amayesa kufanana ndi "b" yomaliza. Ikalephera, imabwerera m'mbuyo-kusiyana ndi "a" yomaliza ndikuyesa `+` quantifier pagulu lakunja. Njirayi imabwereza, kukakamiza injini kuyesa kuphatikiza kulikonse komwe "a" angasankhidwe, zomwe zimapangitsa kuti pakhale kuphulika kophatikizana kwa zotheka. Chiwerengero cha njira zomwe injini ikuyenera kufufuza zitha kutsata masikweya a utali wa zingwe, motero O(n²).

  • Greedy Quantifiers: Matani ngati `.*` kapena `.` amadya mawu ambiri momwe angathere poyambirira, zomwe zimatsogolera ku kubwerera m'mbuyo pamene zigawo zotsatilazo zikulephera kufanana.
  • Nested Quantifiers: Mawu ngati `(a+)+` kapena `(a*a*)*` amapanga njira zochulukirachulukira zogawanitsa zingwe, ndikuwonjezera nthawi yokonza.
  • Zipangidwe Zosamveka: Pamene chingwe chikhoza kufananizidwa munjira zingapo zodutsana, injini iyenera kuyang'ana kuthekera kulikonse kuti ipeze zofananira.

Zochitika Zenizeni Zapadziko Lonse: Kuposa Kutsika Kwambiri

Ili si nkhani yamaphunziro chabe. Kusakwanira kwa regex kumatha kukhala ndi zotsatira zoyipa m'malo opanga. Kufufuza kotsimikizika kwa data komwe kumawoneka ngati kopanda vuto kumatha kukhala kovutirapo mukakonza mafayilo akulu kapena kugwiritsa ntchito kuchuluka kwa ogwiritsa ntchito. Chotsatira chowopsa kwambiri ndi kuwukira kwa ReDoS, pomwe wochita zoyipa amapereka chingwe chopangidwa mwaluso chomwe chimayambitsa zovuta kwambiri mu regex ya pulogalamu yapaintaneti, kupachika seva ndikupangitsa kuti isapezeke kwa ogwiritsa ntchito ovomerezeka. Kwa mabizinesi, izi zimatanthawuza mwachindunji kutsika, kutaya ndalama, ndi kuwononga mbiri. Mukamapanga makina ovuta, makamaka omwe amasanthula data yosadalirika, kudziwa zovuta za regex ndi gawo lofunikira pakuwunika kwachitetezo ndi magwiridwe antchito.

"Tidakhala ndi zosintha zazing'ono zomwe zidayambitsa regex kuti tidutse zingwe za wogwiritsa ntchito. Pansi pa katundu wabwinobwino, zinali bwino. Koma pakukwera kwa magalimoto, zidapangitsa kulephera kwamphamvu komwe kudatsitsa API yathu kwa mphindi. Wolakwira anali O(n²) regex yomwe sitinadziwe kuti tinali nayo." - A Senior DevOps Engineer

Kumanga Smarter Systems ndi Mewayz

Ndiye, tingapitirire bwanji kupyola chopinga chachikuluchi? Yankho limaphatikizapo kuphatikiza zida zabwinoko ndi zosankha zanzeru zamamangidwe. Choyamba, Madivelopa amatha kugwiritsa ntchito zowunikira za regex kuti azindikire zovuta ndi kuzilembanso kuti zikhale zogwira mtima kwambiri (mwachitsanzo, kugwiritsa ntchito zowerengera kapena magulu a atomiki). Kuti mugwire bwino ntchito, pali njira zina zopangira ma aligorivimu zomwe zimatsimikizira nthawi yofananira, O(n), yofananira ndi mapatani, ngakhale sizipezeka m'malaibulale okhazikika.

Apa ndipamene ma modular business OS ngati Mewayz amapereka mwayi waukulu. Mewayz imakupatsani mwayi wogawa ndikuwunika njira zovuta. M'malo mokhala ndi pulogalamu ya monolithic pomwe regex imodzi yocheperako imatha kuyimitsa dongosolo lonselo, mutha kuyika makina odzipatulira, odzipatula kuti asanthule ndikutsimikizira. Ngati vuto la magwiridwe antchito libuka, limakhalapo ndipo litha kuthetsedwa popanda kusokoneza mabizinesi ena. Kuphatikiza apo, zida zowonera zomwe zili papulatifomu ya Mewayz zitha kukuthandizani kudziwa zolephera izi zisanakhudze makasitomala anu, kutembenuza vuto lomwe lingakhalepo kukhala ntchito yotheka kukhathamiritsa. Pomanga pamaziko osinthika komanso owoneka bwino, mumawonetsetsa kuti malingaliro anu abizinesi, kuphatikiza zolemba zovuta, zimakhalabe zogwira mtima komanso zolimba.

💡 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 →

Mafunso Ofunsidwa Kawirikawiri

Mtengo Wobisika Wofananitsa Zitsanzo

Kwa Madivelopa, mawu okhazikika (regex) ndi chida chofunikira kwambiri, mpeni wa Gulu Lankhondo la Swiss pofotokozera, kutsimikizira, ndi kuchotsa zidziwitso pamawu. Kuchokera poyang'ana mafomu a imelo mpaka kuchotsa deta kuchokera ku zipika, regex ndiyo njira yothetsera. Komabe, pansi pa chithunzi champhamvuchi pali msampha wochita bwino womwe wasautsa machitidwe kwazaka zambiri: nthawi yovuta kwambiri yopeza machesi onse mu chingwe ndi O(n²). Kuvuta kwa nthawi ya quadratic kumatanthauza kuti chingwe cholowetsa chikukula motsatira mzere, nthawi yokonza imatha kukula kwambiri, zomwe zimapangitsa kutsika kosayembekezereka, kutha kwa zinthu, ndi chodabwitsa chotchedwa ReDoS (Regular Expression Denial of Service). Kumvetsetsa malire awa ndi sitepe yoyamba yopangira mapulogalamu amphamvu komanso oyenerera.

Chifukwa chiyani Regex Matching O(n²)? Vuto Lobwerera Mmbuyo

Muzu wa zovuta za O(n²) uli m'makina omwe injini zama regex amagwiritsa ntchito: kubwerera m'mbuyo. Injini ya regex, ngati yomwe ili ku Perl, Python, kapena Java, ikuyesera kupeza machesi onse omwe angathe, simangoyang'ana chingwecho kamodzi. Imafufuza njira zosiyanasiyana. Ganizirani njira yosavuta ngati `(a+)+b` yogwiritsidwa ntchito pazingwe zambiri za "a", monga "aaaaaaaaac". Injini mwadyera imagwirizana ndi "a" onse ndi `a +` woyamba, kenako amayesa kufanana ndi "b" yomaliza. Ikalephera, imabwerera m'mbuyo-kusiyana ndi "a" yomaliza ndikuyesa `+` quantifier pagulu lakunja. Njirayi imabwereza, kukakamiza injini kuyesa kuphatikiza kulikonse komwe "a" angasankhidwe, zomwe zimapangitsa kuti pakhale kuphulika kophatikizana kwa zotheka. Chiwerengero cha njira zomwe injini ikuyenera kufufuza zitha kutsata masikweya a utali wa zingwe, motero O(n²).

Zochitika Zenizeni Zapadziko Lonse: Kuposa Kutsika Kwambiri

Ili si nkhani yamaphunziro chabe. Kusakwanira kwa regex kumatha kukhala ndi zotsatira zoyipa m'malo opanga. Kufufuza kotsimikizika kwa data komwe kumawoneka ngati kopanda vuto kumatha kukhala kovutirapo mukakonza mafayilo akulu kapena kugwiritsa ntchito kuchuluka kwa ogwiritsa ntchito. Chotsatira chowopsa kwambiri ndi kuwukira kwa ReDoS, pomwe wochita zoyipa amapereka chingwe chopangidwa mwaluso chomwe chimayambitsa zovuta kwambiri mu regex ya pulogalamu yapaintaneti, kupachika seva ndikupangitsa kuti isapezeke kwa ogwiritsa ntchito ovomerezeka. Kwa mabizinesi, izi zimatanthawuza mwachindunji kutsika, kutaya ndalama, ndi kuwononga mbiri. Mukamapanga makina ovuta, makamaka omwe amasanthula data yosadalirika, kudziwa zovuta za regex ndi gawo lofunikira pakuwunika kwachitetezo ndi magwiridwe antchito.

Kumanga Smarter Systems ndi Mewayz

Ndiye, tingapitirire bwanji kupyola chopinga chachikuluchi? Yankho limaphatikizapo kuphatikiza zida zabwinoko ndi zosankha zanzeru zamamangidwe. Choyamba, Madivelopa amatha kugwiritsa ntchito zowunikira za regex kuti azindikire zovuta ndi kuzilembanso kuti zikhale zogwira mtima kwambiri (mwachitsanzo, kugwiritsa ntchito zowerengera kapena magulu a atomiki). Kuti mugwire bwino ntchito, pali njira zina zopangira ma aligorivimu zomwe zimatsimikizira nthawi yofananira, O(n), yofananira ndi mapatani, ngakhale sizipezeka m'malaibulale okhazikika.

Pangani Bizinesi Yanu OS Lero

Kuchokera kwa odziyimira pawokha mpaka mabungwe, Mewayz imapatsa mphamvu mabizinesi 138,000+ okhala ndi ma module 208 ophatikizika. Yambani mwaulere, sinthani mukakula.

Pangani Akaunti Yaulere →