Bha a bhith a’ lorg a h-uile geama regex a-riamh O (n²) | Mewayz Blog Skip to main content
Hacker News

Bha a bhith a’ lorg a h-uile geama regex a-riamh O (n²)

Beachdan

11 min read Via iev.ee

Mewayz Team

Editorial Team

Hacker News

A’ chosgais fhalaichte airson maidseadh phàtrain

Do luchd-leasachaidh, tha abairtean cunbhalach (regex) nan inneal riatanach, sgian Arm na h-Eilbheis airson fiosrachadh a pharsadh, a dhearbhadh agus a tharraing à teacsa. Bho bhith a’ sgrùdadh chruthan post-d gu bhith a’ sgrìobadh dàta bho logaichean, is e regex am fuasgladh tadhail. Ach, fon aghaidh chumhachdach seo tha ribe dèanadais a tha air a bhith a’ cur dragh air siostaman airson deicheadan: is e an iom-fhillteachd ùine as miosa a bhith a’ lorg a h-uile maids ann an sreang O(n²). Tha an iom-fhillteachd ùine ceithir-cheàrnach seo a’ ciallachadh, mar a bhios an t-sreang cuir a-steach a’ fàs gu sreathach, gum faod an ùine giollachd fàs gu h-obann, a’ leantainn gu slaodachadh ris nach robh dùil, sgìths ghoireasan, agus iongantas ris an canar ReDoS (Sloinneadh Cunbhalach a’ diùltadh Seirbheis). Is e a bhith a’ tuigsinn a’ chuingealachadh gnèitheach seo a’ chiad cheum a dh’ ionnsaigh tagraidhean nas làidire agus nas èifeachdaiche a thogail.

Carson a tha Regex Matching O(n²)? An duilgheadas le tracadh air ais

Tha freumh an iom-fhillteachd O(n²) na laighe anns an uidheamachd a bhios a’ mhòr-chuid de dh’ einnseanan regex traidiseanta a’ cleachdadh: lorg air ais. Nuair a dh’ fheuchas einnsean regex, mar an tè ann am Perl, Python, no Java, ri lorg fhaighinn air a h-uile maids a dh’ fhaodadh a bhith ann, cha bhith e dìreach a’ sganadh an t-sreang aon uair. Bidh e a’ sgrùdadh diofar shlighean. Beachdaich air pàtran sìmplidh mar `(a+) + b` air a chur an sàs ann an sreath de "a" sa mhòr-chuid, mar "aaaaaaaaac". Bidh an einnsean gu seòlta a’ maidseadh a h-uile “a” leis a’ chiad `a +`, agus an uairsin a’ feuchainn ris a’ “b” mu dheireadh a mhaidseadh. Nuair a dh’fhailicheas e, bidh e a’ dol air ais - a’ dèanamh coimeas eadar an “a” mu dheireadh agus a’ feuchainn an tomhas-tomhais `+` air a’ bhuidheann a-muigh. Bidh am pròiseas seo ag ath-aithris, a 'toirt air an einnsean a bhith a' feuchainn a h-uile cothlamadh a dh'fhaodadh a bhith ann de mar a dh'fhaodar na "a" a chur còmhla, a 'leantainn gu spreadhadh de chomasan. Faodaidh an àireamh de shlighean a dh'fheumas an t-einnsean a rannsachadh a bhith co-rèireach ri ceàrnag fad an t-sreang, mar sin O(n²).

  • Maoin-tomhais sanntach: Bidh pàtrain mar `.*` no `.+` ag ithe nas urrainn de theacsa an toiseach, a’ leantainn gu cùl-taic farsaing nuair nach eil na pàirtean eile den phàtran a’ maidseadh.
  • Maoin-tomhais neadaichte: Bidh abairtean mar `(a+)+` no `(a*a*)*` a' cruthachadh grunn dhòighean air an t-sreang ion-chuir a roinn, a' meudachadh gu mòr an ùine giollachd.
  • Pàtranan dà-sheaghach: Nuair a ghabhas sreang a mhaidseadh ann an iomadh dòigh a tha a’ dol an lùib a chèile, feumaidh an t-einnsean sgrùdadh a dhèanamh air gach comas gus a h-uile maids a lorg.

A’ bhuaidh air an t-saoghal fhìor: Barrachd air dìreach slaodachadh

Chan e dìreach dragh acadaimigeach a tha seo. Faodaidh droch bhuaidh a bhith aig regex neo-èifeachdach ann an àrainneachdan cinneasachaidh. Faodaidh sgrùdadh dearbhaidh dàta a tha coltach gun chron a bhith na bhotal nuair a bhios tu a’ giullachd fhaidhlichean mòra no a’ làimhseachadh mòran de chuir a-steach luchd-cleachdaidh. Is e an toradh as cunnartaiche ionnsaigh ReDoS, far am bi cleasaiche droch-rùnach a’ toirt seachad sreang a tha air a dhealbhadh gu faiceallach a bhrosnaicheas an coileanadh as miosa ann an regex tagradh lìn, gu h-èifeachdach a’ crochadh an fhrithealaiche agus ga fhàgail nach eil ri fhaighinn do luchd-cleachdaidh dligheach. Do ghnìomhachasan, tha seo ag eadar-theangachadh gu dìreach gu ùine downt, teachd-a-steach caillte, agus cliù millte. Nuair a bhios tu a’ togail shiostaman iom-fhillte, gu h-àraidh an fheadhainn a bhios a’ làimhseachadh dàta neo-earbsach, tha a bhith mothachail air na duilgheadasan regex sin na phàirt deatamach de sgrùdadh tèarainteachd is coileanaidh.

"Bha ùrachadh beag rèiteachaidh againn aon uair a thug a-steach regex gus teudan neach-cleachdaidh a pharsadh. Fo eallach àbhaisteach, bha e ceart gu leòr. Ach ri linn spìc trafaic, dh’ adhbhraich e fàilligeadh cascading a thug sìos an API againn airson mionaidean. B’ e O(n²) regex a bh’ anns an neach a bha ciontach nach robh fios againn a-riamh a bha againn." - Àrd-innleadair DevOps

A’ togail shiostaman nas sgiobalta le Mewayz

Mar sin, ciamar a ghluaiseas sinn seachad air a’ bhacadh bhunasach seo? Tha am fuasgladh a’ toirt a-steach measgachadh de dh’ innealan nas fheàrr agus roghainnean ailtireachd nas buige. An toiseach, faodaidh luchd-leasachaidh sgrùdairean regex a chleachdadh gus pàtrain trioblaideach a chomharrachadh agus ath-sgrìobhadh gus a bhith nas èifeachdaiche (me, a’ cleachdadh tomhasan seilbheach no buidhnean atamach). Airson coileanadh deireannach, tha algorithms eile ann a tha a’ gealltainn ùine sreathach, O(n), airson maidseadh phàtranan, ged nach eil iad cho cumanta ann an leabharlannan àbhaisteach.

Seo far a bheil OS gnìomhachais modular mar Mewayz a’ toirt buannachd mhòr. Leigidh Mewayz leat pròiseasan èiginneach a roinn agus a sgrùdadh. An àite tagradh monolithic a bhith agad far am faod aon regex slaodach an siostam gu lèir a mhilleadh, faodaidh tu microservice sònraichte, iomallach a chleachdadh airson parsadh agus dearbhadh dàta. Ma dh’ èiricheas cùis coileanaidh, tha e ann agus faodar dèiligeadh ris gun a bhith a’ toirt buaidh air gnìomhachd gnìomhachais eile. A bharrachd air an sin, faodaidh na h-innealan amharc taobh a-staigh àrd-ùrlar Mewayz do chuideachadh gus na neo-èifeachdas sin a chomharrachadh mus toir iad buaidh air do luchd-ceannach, a ’tionndadh èiginn a dh’ fhaodadh a bhith na ghnìomh optimization a ghabhas riaghladh. Le bhith a’ togail air bunait sùbailte agus faicsinneach, bidh thu a’ dèanamh cinnteach gu bheil loidsig do ghnìomhachas, a’ gabhail a-steach giullachd teacsa iom-fhillte, fhathast coileanta agus tapaidh.

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

Ceistean Bitheanta

Cosgais Falaichte Co-fhreagairt Pàtrain

Do luchd-leasachaidh, tha abairtean cunbhalach (regex) nan inneal riatanach, sgian Arm na h-Eilbheis airson fiosrachadh a pharsadh, a dhearbhadh agus a tharraing à teacsa. Bho bhith a’ sgrùdadh chruthan post-d gu bhith a’ sgrìobadh dàta bho logaichean, is e regex am fuasgladh tadhail. Ach, fon aghaidh chumhachdach seo tha ribe dèanadais a tha air a bhith a’ cur dragh air siostaman airson deicheadan: is e an iom-fhillteachd ùine as miosa a bhith a’ lorg a h-uile maids ann an sreang O(n²). Tha an iom-fhillteachd ùine ceithir-cheàrnach seo a’ ciallachadh, mar a bhios an t-sreang cuir a-steach a’ fàs gu sreathach, gum faod an ùine giollachd fàs gu h-obann, a’ leantainn gu slaodachadh ris nach robh dùil, sgìths ghoireasan, agus iongantas ris an canar ReDoS (Dìoladh Seirbheis cunbhalach). Is e a bhith a’ tuigsinn a’ chuingealachadh gnèitheach seo a’ chiad cheum a dh’ ionnsaigh tagraidhean nas làidire agus nas èifeachdaiche a thogail.

Carson a tha Regex Matching O(n²)? An duilgheadas le tracadh air ais

Tha freumh an iom-fhillteachd O(n²) na laighe anns an uidheamachd a bhios a’ mhòr-chuid de dh’ einnseanan regex traidiseanta a’ cleachdadh: lorg air ais. Nuair a dh’ fheuchas einnsean regex, mar an tè ann am Perl, Python, no Java, ri lorg fhaighinn air a h-uile maids a dh’ fhaodadh a bhith ann, cha bhith e dìreach a’ sganadh an t-sreang aon uair. Bidh e a’ sgrùdadh diofar shlighean. Beachdaich air pàtran sìmplidh mar `(a+) + b` air a chur an sàs ann an sreath de "a" sa mhòr-chuid, mar "aaaaaaaaac". Bidh an einnsean gu seòlta a’ maidseadh a h-uile “a” leis a’ chiad `a +`, agus an uairsin a’ feuchainn ris a’ “b” mu dheireadh a mhaidseadh. Nuair a dh’fhailicheas e, bidh e a’ dol air ais - a’ dèanamh coimeas eadar an “a” mu dheireadh agus a’ feuchainn an tomhas-tomhais `+` air a’ bhuidheann a-muigh. Bidh am pròiseas seo ag ath-aithris, a 'toirt air an einnsean a bhith a' feuchainn a h-uile cothlamadh a dh'fhaodadh a bhith ann de mar a dh'fhaodar na "a" a chur còmhla, a 'leantainn gu spreadhadh de chomasan. Faodaidh an àireamh de shlighean a dh'fheumas an t-einnsean a rannsachadh a bhith co-rèireach ri ceàrnag fad an t-sreang, mar sin O(n²).

Buaidh an t-Saoghail Dha-rìribh: Barrachd air dìreach Slowdowns

Chan e dìreach dragh acadaimigeach a tha seo. Faodaidh droch bhuaidh a bhith aig regex neo-èifeachdach ann an àrainneachdan cinneasachaidh. Faodaidh sgrùdadh dearbhaidh dàta a tha coltach gun chron a bhith na bhotal nuair a bhios tu a’ giullachd fhaidhlichean mòra no a’ làimhseachadh mòran de chuir a-steach luchd-cleachdaidh. Is e an toradh as cunnartaiche ionnsaigh ReDoS, far am bi cleasaiche droch-rùnach a’ toirt seachad sreang a tha air a dhealbhadh gu faiceallach a bhrosnaicheas an coileanadh as miosa ann an regex tagradh lìn, gu h-èifeachdach a’ crochadh an fhrithealaiche agus ga fhàgail nach eil ri fhaighinn do luchd-cleachdaidh dligheach. Do ghnìomhachasan, tha seo ag eadar-theangachadh gu dìreach gu ùine downt, teachd-a-steach caillte, agus cliù millte. Nuair a bhios tu a’ togail shiostaman iom-fhillte, gu h-àraidh an fheadhainn a bhios a’ làimhseachadh dàta neo-earbsach, tha a bhith mothachail air na duilgheadasan regex sin na phàirt deatamach de sgrùdadh tèarainteachd is coileanaidh.

A’ togail shiostaman nas sgiobalta le Mewayz

Mar sin, ciamar a ghluaiseas sinn seachad air a’ bhacadh bhunasach seo? Tha am fuasgladh a’ toirt a-steach measgachadh de dh’ innealan nas fheàrr agus roghainnean ailtireachd nas buige. An toiseach, faodaidh luchd-leasachaidh sgrùdairean regex a chleachdadh gus pàtrain trioblaideach a chomharrachadh agus ath-sgrìobhadh gus a bhith nas èifeachdaiche (me, a’ cleachdadh tomhasan seilbheach no buidhnean atamach). Airson coileanadh deireannach, tha algorithms eile ann a tha a’ gealltainn ùine sreathach, O(n), airson maidseadh phàtranan, ged nach eil iad cho cumanta ann an leabharlannan àbhaisteach.

Tog do ghnìomhachas OS an-diugh

Bho luchd-obrach neo-cheangailte gu buidhnean-gnìomha, tha Mewayz a’ toirt cumhachd do 138,000+ gnìomhachas le 208 modal amalaichte. Tòisich an-asgaidh, àrdaich nuair a dh'fhàsas tu.

Cruthaich cunntas an-asgaidh →