আমি নিয়মিত এক্সপ্রেশন অস্বীকার পরিষেবার (রিডোএস) সম্পর্কে সচেতন। ব্যবহারকারীরা যখন কোনও তাত্পর্যপূর্ণ ধীর প্যাটার্ন জমা দেবেন না তার গ্যারান্টি দিয়ে কাস্টম রেজেক্সগুলি তৈরি করার অনুমতি দেওয়ার কোনও যুক্তিসঙ্গত উপায় আছে কি?
আমি নিয়মিত এক্সপ্রেশন অস্বীকার পরিষেবার (রিডোএস) সম্পর্কে সচেতন। ব্যবহারকারীরা যখন কোনও তাত্পর্যপূর্ণ ধীর প্যাটার্ন জমা দেবেন না তার গ্যারান্টি দিয়ে কাস্টম রেজেক্সগুলি তৈরি করার অনুমতি দেওয়ার কোনও যুক্তিসঙ্গত উপায় আছে কি?
উত্তর:
নিয়মিত অভিব্যক্তিগুলির সমস্যাটি রেজেক্স নিজেই নয়, তবে রেগেক্স ইঞ্জিনটিতে ব্যাকট্র্যাকিংয়ের মতো সমস্ত ধরণের "সুবিধাজনক" বৈশিষ্ট্য রয়েছে। অতএব, এই বৈশিষ্ট্যগুলি ছাড়াই একটি রেজেক্স ইঞ্জিন ব্যবহার করা এড়ানো যায়।
একটি সীমাবদ্ধ রাষ্ট্রের মেশিনে সংকলিত হওয়ার পরে নিয়মিত অভিব্যক্তি কম্পিউটার বিজ্ঞান ধারণাটি সর্বদা রৈখিক সময়ের সাথে মিলে যায়। সুতরাং একটি রাষ্ট্র-মেশিন ভিত্তিক রেজেক্স ইঞ্জিন রিডোএসের জন্য ব্যবহার করা যাবে না। তবে প্রয়োজনীয় রাষ্ট্রীয় মেশিনগুলি প্যাথলজিকাল উদাহরণগুলিতে বরং বড় হয়ে উঠতে পারে। তবে উপলব্ধ মেমরি সীমাবদ্ধ করা উপলব্ধ গণনার সময় সীমাবদ্ধ করার চেয়ে সহজ হতে পারে।
RE2 ইঞ্জিন বিশেষভাবে উন্নত ছিল অবিশ্বস্ত regexes সঙ্গে মোকাবিলা করার জন্য এবং রৈখিক সময় সঞ্চালনের জন্য পরিকল্পনা করা হয়েছিল।
আরেকটি বিকল্প হ'ল সরলীকৃত স্বরলিপি থেকে নিজেকে রেগেক্স করে। উদাহরণস্বরূপ, আপনি ব্যবহারকারীদের গ্লোব নিদর্শন (যেমন *.txt
) ব্যবহার করার অনুমতি দিতে পারেন । এরপরে আপনি এটি এমনভাবে পার্স করতে পারেন যা ব্যাকট্র্যাকিং প্রতিরোধ করে, যেমন নীড় বাঁধা এবং কেবল লোভী কোয়ান্টিফায়ার ব্যবহার করে। অনেক ব্যবহারের ক্ষেত্রে, সরলিকৃত প্যাটার্ন স্বরলিপি সম্পূর্ণরূপে যথেষ্ট।
বিশ্লেষণটি ধীরে ধীরে ধীরে ধীরে না হয়ে এ ধীর হবে কি না তা দেখার জন্য একটি নিয়মিত অভিব্যক্তি বিশ্লেষণ থামানো সমস্যার সমাধানের সমান। অন্য কথায়, একটি সঠিক এবং সম্পূর্ণ সমাধান খুঁজে পাওয়া সম্ভব নয় ।
আপনি করতে পারেন, অবশ্যই, একটি সমাধান যে সঠিক এবং এটি মধ্যে সম্পূর্ণ। উদাহরণস্বরূপ, আপনি ব্যবহার করতে নিরাপদ এমন বৈশিষ্ট্যগুলির একটি সীমাবদ্ধ সাদা তালিকা নিয়ে কাজ করতে পারেন (উদাহরণস্বরূপ অক্ষর শ্রেণি হ্যাঁ, পুনরাবৃত্তি নং ...)। এটি আপনাকে প্রচুর অবৈধ পুনর্বিবেচনার অনুমতি দেয়, সমস্ত সমালোচনা প্রত্যাখ্যান করে এবং (ভুলভাবে) কিছু ঠিক আছে যা প্রত্যাখ্যান করে তবে স্বয়ংক্রিয়ভাবে নিরাপদ প্রমাণ করতে খুব জটিল।
লাজারাস প্রোজেক্টের রি পার্সার লেখক হিসাবে আমি বলব যে কোনও নির্দিষ্ট নিয়মিত প্রকাশের জন্য এটি বোঝার কোনও উপায় নেই যে এটি কোনও নির্দিষ্ট পাঠ্যে কী কী সংস্থান ব্যবহার করবে।
একই সংস্থানগুলি ব্যয় না করে আমি (কমপক্ষে বিগ-ও অর্থ)।
সুতরাং সেরা পন্থা - পৃথক থ্রেডে রি পার্সার চালান এবং সময় শেষ হওয়ার পরে এটি হত্যা করুন।
অন্যান্য উত্তরের পাশাপাশি, একটি সমাধান হতে পারে আপনার নিজস্ব রেইজেক্স গ্রন্থাগারটিও রোল করা যা কার্যকর করার সময় পারফরম্যান্স উপকরণের অনুমতি দেয় এবং এইভাবে কিছু মানদণ্ড পূরণ করা হলে অর্ধেকের মধ্যে ফাঁসির মৃত্যুর উপায় সরবরাহ করে।
একইভাবে, আপনি অন্য থ্রেডে রেজিজেসগুলি চালাতে এবং থ্রেডগুলি খুব বেশি সময় নিলে হত্যা করতে পারেন।