ຊອກຫາການແຂ່ງຂັນ regex ທັງໝົດແມ່ນ O(n²) ສະເໝີ.
ຄຳເຫັນ
Mewayz Team
Editorial Team
ຄ່າໃຊ້ຈ່າຍທີ່ເຊື່ອງໄວ້ຂອງການຈັບຄູ່ຮູບແບບ
ສຳລັບຜູ້ພັດທະນາ, ການສະແດງອອກປົກກະຕິ (regex) ເປັນເຄື່ອງມືທີ່ຂາດບໍ່ໄດ້, ມີດກອງທັບສະວິດເຊີແລນສໍາລັບການວິເຄາະ, ການກວດສອບ, ແລະການດຶງຂໍ້ມູນຈາກຂໍ້ຄວາມ. ຈາກການກວດສອບຮູບແບບອີເມວຈົນເຖິງການຂູດຂໍ້ມູນຈາກບັນທຶກ, regex ແມ່ນການແກ້ໄຂ. ຢ່າງໃດກໍຕາມ, ພາຍໃຕ້ facade ທີ່ມີປະສິດທິພາບນີ້ແມ່ນກັບດັກປະສິດທິພາບທີ່ plagued ລະບົບສໍາລັບການທົດສະວັດ: ກໍລະນີທີ່ຮ້າຍແຮງທີ່ສຸດຄວາມສັບສົນຂອງການຊອກຫາທີ່ກົງກັນໃນສະຕຣິງແມ່ນ O(n²). ຄວາມຊັບຊ້ອນເວລາສີ່ຫຼ່ຽມນີ້ໝາຍຄວາມວ່າເມື່ອສາຍປ້ອນຂໍ້ມູນຈະເລີນເຕີບໂຕເປັນເສັ້ນ, ເວລາປະມວນຜົນສາມາດເຕີບໃຫຍ່ຂຶ້ນໄດ້, ເຮັດໃຫ້ເກີດການຊ້າລົງທີ່ບໍ່ຄາດຄິດ, ການໝົດຊັບພະຍາກອນ ແລະ ປະກົດການທີ່ເອີ້ນວ່າ ReDoS (Regular Expression Denial of Service). ການເຂົ້າໃຈຂໍ້ຈຳກັດທີ່ມີມາແລ້ວນີ້ເປັນບາດກ້າວທຳອິດໃນການສ້າງແອັບພລິເຄຊັນທີ່ເຂັ້ມແຂງຂຶ້ນ ແລະປະສິດທິຜົນ.
ເປັນຫຍັງ Regex ຈຶ່ງຈັບຄູ່ O(n²)? ບັນຫາຂອງການຕິດຕາມຄືນ
ຮາກຂອງຄວາມສັບສົນ O(n²) ແມ່ນຢູ່ໃນກົນໄກທີ່ເຄື່ອງຈັກ regex ແບບດັ້ງເດີມໃຊ້ຫຼາຍທີ່ສຸດ: backtracking. ເມື່ອເຄື່ອງຈັກ regex, ເຊັ່ນດຽວໃນ Perl, Python, ຫຼື Java, ພະຍາຍາມຊອກຫາການຈັບຄູ່ທີ່ເປັນໄປໄດ້ທັງຫມົດ, ມັນບໍ່ພຽງແຕ່ສະແກນສາຍຫນຶ່ງຄັ້ງ. ມັນຄົ້ນຫາເສັ້ນທາງທີ່ແຕກຕ່າງກັນ. ພິຈາລະນາຮູບແບບທີ່ງ່າຍດາຍເຊັ່ນ: `(a+)+b` ທີ່ໃຊ້ກັບສະຕຣິງຂອງ "a" ສ່ວນໃຫຍ່ເຊັ່ນ "aaaaaaac". ເຄື່ອງຈັກຈັບຄູ່ "a" ທັງໝົດກັບ `a+` ທຳອິດ, ຈາກນັ້ນພະຍາຍາມຈັບຄູ່ "b" ສຸດທ້າຍ. ເມື່ອມັນລົ້ມເຫລວ, ມັນຈະຖອຍຫຼັງ - ບໍ່ກົງກັນກັບ "a" ສຸດທ້າຍແລະພະຍາຍາມຕົວກໍານົດປະລິມານ `+` ໃນກຸ່ມນອກ. ຂະບວນການນີ້ເຮັດຊ້ໍາອີກ, ບັງຄັບໃຫ້ເຄື່ອງຈັກພະຍາຍາມປະສົມປະສານທີ່ເປັນໄປໄດ້ຂອງວິທີການ "a" ສາມາດຖືກຈັດເປັນກຸ່ມ, ນໍາໄປສູ່ການລະເບີດຂອງຄວາມເປັນໄປໄດ້. ຈຳນວນເສັ້ນທາງທີ່ເຄື່ອງຈັກຕ້ອງສຳຫຼວດສາມາດເປັນສັດສ່ວນກັບສີ່ຫຼ່ຽມຂອງຄວາມຍາວສາຍ, ດັ່ງນັ້ນ O(n²).
- Greedy Quantifiers: ຮູບແບບເຊັ່ນ: `.*` ຫຼື `.+` ໃຊ້ຂໍ້ຄວາມຫຼາຍເທົ່າທີ່ເປັນໄປໄດ້ໃນຕອນຕົ້ນ, ນໍາໄປສູ່ການຕິດຕາມທີ່ກວ້າງຂວາງເມື່ອພາກສ່ວນຕໍ່ໄປຂອງຮູບແບບບໍ່ກົງກັນ.
- Nested Quantifiers: ການສະແດງອອກເຊັ່ນ: `(a+)+` ຫຼື `(a*a*)*` ສ້າງຈຳນວນເລກກຳລັງຂອງວິທີການແຍກສະຕຣິງປ້ອນເຂົ້າ, ເພີ່ມເວລາປະມວນຜົນຢ່າງຫຼວງຫຼາຍ.
- ຮູບແບບທີ່ບໍ່ຊັດເຈນ: ເມື່ອສະຕຣິງສາມາດຖືກຈັບຄູ່ໄດ້ໃນຫຼາຍວິທີຊ້ອນກັນ, ເຄື່ອງຈັກຈະຕ້ອງກວດເບິ່ງແຕ່ລະຄວາມເປັນໄປໄດ້ເພື່ອຊອກຫາການຈັບຄູ່ທັງໝົດ.
ຜົນກະທົບຂອງໂລກທີ່ແທ້ຈິງ: ຫຼາຍກ່ວາພຽງແຕ່ການຊ້າລົງ
ນີ້ບໍ່ພຽງແຕ່ເປັນຄວາມກັງວົນທາງວິຊາການ. regex ທີ່ບໍ່ມີປະສິດທິພາບສາມາດສົ່ງຜົນສະທ້ອນຮ້າຍແຮງໃນສະພາບແວດລ້ອມການຜະລິດ. ການກວດສອບການກວດສອບຂໍ້ມູນທີ່ເບິ່ງຄືວ່າບໍ່ເປັນອັນຕະລາຍສາມາດກາຍເປັນຂໍ້ບົກຜ່ອງໃນເວລາທີ່ການປຸງແຕ່ງໄຟລ໌ຂະຫນາດໃຫຍ່ຫຼືການຈັດການປະລິມານທີ່ຜູ້ໃຊ້ເຂົ້າມາຫຼາຍ. ຜົນໄດ້ຮັບທີ່ເປັນອັນຕະລາຍທີ່ສຸດແມ່ນການໂຈມຕີ ReDoS, ບ່ອນທີ່ນັກສະແດງທີ່ເປັນອັນຕະລາຍສະຫນອງສາຍສະຕິງທີ່ສ້າງຂື້ນຢ່າງລະມັດລະວັງທີ່ເຮັດໃຫ້ເກີດການປະຕິບັດທີ່ຮ້າຍແຮງທີ່ສຸດໃນ regex ຂອງແອັບພລິເຄຊັນເວັບ, ເຮັດໃຫ້ເຄື່ອງແມ່ຂ່າຍທີ່ຫ້ອຍຢ່າງມີປະສິດທິພາບແລະເຮັດໃຫ້ມັນບໍ່ສາມາດໃຊ້ກັບຜູ້ໃຊ້ທີ່ຖືກຕ້ອງຕາມກົດຫມາຍ. ສໍາລັບທຸລະກິດ, ນີ້ແປໂດຍກົງກັບການຢຸດເຮັດວຽກ, ການສູນເສຍລາຍໄດ້, ແລະຊື່ສຽງເສຍຫາຍ. ເມື່ອສ້າງລະບົບທີ່ຊັບຊ້ອນ, ໂດຍສະເພາະແມ່ນການປະມວນຜົນຂໍ້ມູນທີ່ບໍ່ໜ້າເຊື່ອຖື, ການຮູ້ເຖິງບັນຫາ regex ເຫຼົ່ານີ້ເປັນສ່ວນສຳຄັນຂອງການກວດສອບຄວາມປອດໄພ ແລະ ປະສິດທິພາບ.
"ຄັ້ງໜຶ່ງພວກເຮົາໄດ້ມີການອັບເດດການຕັ້ງຄ່າເລັກນ້ອຍທີ່ນໍາສະເໜີ regex ເພື່ອວິເຄາະສາຍສະຕຣິງຕົວແທນຜູ້ໃຊ້. ພາຍໃຕ້ການໂຫຼດແບບປົກກະຕິ, ມັນດີ. ແຕ່ໃນລະຫວ່າງການຈະລາຈອນທີ່ເພີ່ມຂຶ້ນ, ມັນເຮັດໃຫ້ເກີດຄວາມລົ້ມເຫຼວທີ່ພາໃຫ້ API ຂອງພວກເຮົາຫຼຸດລົງເປັນເວລານາທີ. ຜູ້ຮ້າຍແມ່ນ O(n²) regex ທີ່ພວກເຮົາບໍ່ເຄີຍຮູ້ວ່າພວກເຮົາມີ." - ວິສະວະກອນ DevOps ອາວຸໂສ
ສ້າງລະບົບທີ່ສະຫຼາດກວ່າດ້ວຍ Mewayz
ສະນັ້ນ, ພວກເຮົາຈະກ້າວໄປເໜືອຂໍ້ຈຳກັດພື້ນຖານນີ້ແນວໃດ? ການແກ້ໄຂປະກອບມີການປະສົມປະສານຂອງເຄື່ອງມືທີ່ດີກວ່າແລະທາງເລືອກສະຖາປັດຕະຍະກໍາທີ່ສະຫລາດກວ່າ. ທໍາອິດ, ນັກພັດທະນາສາມາດນໍາໃຊ້ການວິເຄາະ regex ເພື່ອກໍານົດຮູບແບບທີ່ມີບັນຫາແລະຂຽນຄືນໃຫມ່ເພື່ອໃຫ້ມີປະສິດທິພາບຫຼາຍຂຶ້ນ (ເຊັ່ນ: ການນໍາໃຊ້ຕົວກໍານົດປະລິມານທີ່ຄອບຄອງຫຼືກຸ່ມປະລໍາມະນູ). ເພື່ອປະສິດທິພາບສູງສຸດ, ມີສູດການຄິດໄລ່ທາງເລືອກທີ່ຮັບປະກັນເວລາເສັ້ນຊື່, O(n), ສໍາລັບການຈັບຄູ່ຮູບແບບ, ເຖິງແມ່ນວ່າພວກມັນມີຫນ້ອຍໃນຫ້ອງສະຫມຸດມາດຕະຖານ.
ນີ້ແມ່ນບ່ອນທີ່ OS ທຸລະກິດແບບໂມດູລາເຊັ່ນ Mewayz ສະຫນອງປະໂຫຍດທີ່ສໍາຄັນ. Mewayz ອະນຸຍາດໃຫ້ທ່ານສາມາດ compartmentalize ແລະຕິດຕາມກວດກາຂະບວນການທີ່ສໍາຄັນ. ແທນທີ່ຈະມີຄໍາຮ້ອງສະຫມັກ monolithic ທີ່ regex ຊ້າດຽວສາມາດທໍາລາຍລະບົບທັງຫມົດ, ທ່ານສາມາດນໍາໃຊ້ microservice ທີ່ອຸທິດຕົນ, ໂດດດ່ຽວສໍາລັບການວິເຄາະຂໍ້ມູນແລະການກວດສອບ. ຖ້າບັນຫາການປະຕິບັດເກີດຂື້ນ, ມັນຖືກບັນຈຸແລະສາມາດແກ້ໄຂໄດ້ໂດຍບໍ່ມີຜົນກະທົບຕໍ່ການດໍາເນີນທຸລະກິດອື່ນໆ. ຍິ່ງໄປກວ່ານັ້ນ, ເຄື່ອງມືການສັງເກດການພາຍໃນແພລະຕະຟອມ 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 ແມ່ນການແກ້ໄຂ. ຢ່າງໃດກໍຕາມ, ພາຍໃຕ້ facade ທີ່ມີປະສິດທິພາບນີ້ແມ່ນກັບດັກປະສິດທິພາບທີ່ plagued ລະບົບສໍາລັບການທົດສະວັດ: ກໍລະນີທີ່ຮ້າຍແຮງທີ່ສຸດຄວາມສັບສົນຂອງການຊອກຫາທີ່ກົງກັນໃນສະຕຣິງແມ່ນ O(n²). ຄວາມສັບສົນຂອງເວລາ quadratic ນີ້ຫມາຍຄວາມວ່າຍ້ອນວ່າສາຍພັນເຂົ້າເພີ່ມຂຶ້ນເປັນເສັ້ນ, ເວລາປະມວນຜົນສາມາດເຕີບໂຕເປັນຕົວເລກ, ນໍາໄປສູ່ການຊ້າລົງທີ່ບໍ່ຄາດຄິດ, ຊັບພະຍາກອນທີ່ຫມົດໄປ, ແລະປະກົດການທີ່ເອີ້ນວ່າ ReDoS (ການປະຕິເສດການສະແດງອອກປົກກະຕິ). ການເຂົ້າໃຈຂໍ້ຈຳກັດທີ່ມີມາແລ້ວນີ້ເປັນບາດກ້າວທຳອິດໃນການສ້າງແອັບພລິເຄຊັນທີ່ເຂັ້ມແຂງຂຶ້ນ ແລະປະສິດທິຜົນ.
ເປັນຫຍັງ Regex ຈຶ່ງຈັບຄູ່ O(n²)? ບັນຫາຂອງການຕິດຕາມຄືນ
ຮາກຂອງຄວາມສັບສົນ O(n²) ແມ່ນຢູ່ໃນກົນໄກທີ່ເຄື່ອງຈັກ regex ແບບດັ້ງເດີມໃຊ້ຫຼາຍທີ່ສຸດ: backtracking. ເມື່ອເຄື່ອງຈັກ regex, ເຊັ່ນດຽວໃນ Perl, Python, ຫຼື Java, ພະຍາຍາມຊອກຫາການຈັບຄູ່ທີ່ເປັນໄປໄດ້ທັງຫມົດ, ມັນບໍ່ພຽງແຕ່ສະແກນສາຍຫນຶ່ງຄັ້ງ. ມັນຄົ້ນຫາເສັ້ນທາງທີ່ແຕກຕ່າງກັນ. ພິຈາລະນາຮູບແບບທີ່ງ່າຍດາຍເຊັ່ນ: `(a+)+b` ທີ່ໃຊ້ກັບສະຕຣິງຂອງ "a" ສ່ວນໃຫຍ່ເຊັ່ນ "aaaaaaac". ເຄື່ອງຈັກຈັບຄູ່ "a" ທັງໝົດກັບ `a+` ທຳອິດ, ຈາກນັ້ນພະຍາຍາມຈັບຄູ່ "b" ສຸດທ້າຍ. ເມື່ອມັນລົ້ມເຫລວ, ມັນຈະຖອຍຫຼັງ - ບໍ່ກົງກັນກັບ "a" ສຸດທ້າຍແລະພະຍາຍາມຕົວກໍານົດປະລິມານ `+` ໃນກຸ່ມນອກ. ຂະບວນການນີ້ເຮັດຊ້ໍາອີກ, ບັງຄັບໃຫ້ເຄື່ອງຈັກພະຍາຍາມປະສົມປະສານທີ່ເປັນໄປໄດ້ຂອງວິທີການ "a" ສາມາດຖືກຈັດເປັນກຸ່ມ, ນໍາໄປສູ່ການລະເບີດຂອງຄວາມເປັນໄປໄດ້. ຈຳນວນເສັ້ນທາງທີ່ເຄື່ອງຈັກຕ້ອງສຳຫຼວດສາມາດເປັນສັດສ່ວນກັບສີ່ຫຼ່ຽມຂອງຄວາມຍາວສາຍ, ດັ່ງນັ້ນ O(n²).
ຜົນກະທົບຂອງໂລກທີ່ແທ້ຈິງ: ຫຼາຍກ່ວາພຽງແຕ່ການຊ້າລົງ
ນີ້ບໍ່ພຽງແຕ່ເປັນຄວາມກັງວົນທາງວິຊາການ. regex ທີ່ບໍ່ມີປະສິດທິພາບສາມາດສົ່ງຜົນສະທ້ອນຮ້າຍແຮງໃນສະພາບແວດລ້ອມການຜະລິດ. ການກວດສອບການກວດສອບຂໍ້ມູນທີ່ເບິ່ງຄືວ່າບໍ່ເປັນອັນຕະລາຍສາມາດກາຍເປັນຂໍ້ບົກຜ່ອງໃນເວລາທີ່ການປຸງແຕ່ງໄຟລ໌ຂະຫນາດໃຫຍ່ຫຼືການຈັດການປະລິມານທີ່ຜູ້ໃຊ້ເຂົ້າມາຫຼາຍ. ຜົນໄດ້ຮັບທີ່ເປັນອັນຕະລາຍທີ່ສຸດແມ່ນການໂຈມຕີ ReDoS, ບ່ອນທີ່ນັກສະແດງທີ່ເປັນອັນຕະລາຍສະຫນອງສາຍສະຕິງທີ່ສ້າງຂື້ນຢ່າງລະມັດລະວັງທີ່ເຮັດໃຫ້ເກີດການປະຕິບັດທີ່ຮ້າຍແຮງທີ່ສຸດໃນ regex ຂອງແອັບພລິເຄຊັນເວັບ, ເຮັດໃຫ້ເຄື່ອງແມ່ຂ່າຍທີ່ຫ້ອຍຢ່າງມີປະສິດທິພາບແລະເຮັດໃຫ້ມັນບໍ່ສາມາດໃຊ້ກັບຜູ້ໃຊ້ທີ່ຖືກຕ້ອງຕາມກົດຫມາຍ. ສໍາລັບທຸລະກິດ, ນີ້ແປໂດຍກົງກັບການຢຸດເຮັດວຽກ, ການສູນເສຍລາຍໄດ້, ແລະຊື່ສຽງເສຍຫາຍ. ເມື່ອສ້າງລະບົບທີ່ຊັບຊ້ອນ, ໂດຍສະເພາະແມ່ນການປະມວນຜົນຂໍ້ມູນທີ່ບໍ່ໜ້າເຊື່ອຖື, ການຮູ້ເຖິງບັນຫາ regex ເຫຼົ່ານີ້ເປັນສ່ວນສຳຄັນຂອງການກວດສອບຄວາມປອດໄພ ແລະ ປະສິດທິພາບ.
ສ້າງລະບົບທີ່ສະຫຼາດກວ່າດ້ວຍ Mewayz
ສະນັ້ນ, ພວກເຮົາຈະກ້າວໄປເໜືອຂໍ້ຈຳກັດພື້ນຖານນີ້ແນວໃດ? ການແກ້ໄຂປະກອບມີການປະສົມປະສານຂອງເຄື່ອງມືທີ່ດີກວ່າແລະທາງເລືອກສະຖາປັດຕະຍະກໍາທີ່ສະຫລາດກວ່າ. ທໍາອິດ, ນັກພັດທະນາສາມາດນໍາໃຊ້ການວິເຄາະ regex ເພື່ອກໍານົດຮູບແບບທີ່ມີບັນຫາແລະຂຽນຄືນໃຫມ່ເພື່ອໃຫ້ມີປະສິດທິພາບຫຼາຍຂຶ້ນ (ເຊັ່ນ: ການນໍາໃຊ້ຕົວກໍານົດປະລິມານທີ່ຄອບຄອງຫຼືກຸ່ມປະລໍາມະນູ). ເພື່ອປະສິດທິພາບສູງສຸດ, ມີສູດການຄິດໄລ່ທາງເລືອກທີ່ຮັບປະກັນເວລາເສັ້ນຊື່, O(n), ສໍາລັບການຈັບຄູ່ຮູບແບບ, ເຖິງແມ່ນວ່າພວກມັນມີຫນ້ອຍໃນຫ້ອງສະຫມຸດມາດຕະຖານ.
ສ້າງ OS ທຸລະກິດຂອງທ່ານໃນມື້ນີ້
ຈາກນັກງານອິດສະລະເຖິງອົງການ, Mewayz ມອບອຳນາດໃຫ້ 138,000+ ທຸລະກິດດ້ວຍ 208 ໂມດູນປະສົມປະສານ. ເລີ່ມຟຣີ, ອັບເກຣດເມື່ອທ່ານເຕີບໃຫຍ່.
ສ້າງບັນຊີຟຣີ →We use cookies to improve your experience and analyze site traffic. Cookie Policy