"এখন আপনার দুটি সমস্যা আছে" বলতে কী বোঝায়?


200

নেই একটি জনপ্রিয় উদ্ধৃতি জেমি Zawinski :

কিছু লোক, যখন কোনও সমস্যার মুখোমুখি হয়, তখন "আমি জানি, আমি নিয়মিত অভিব্যক্তি ব্যবহার করব" think এখন তারা দুটি সমস্যা আছে।

এই উদ্ধৃতিটি কীভাবে বোঝার কথা?


46
২ য় সমস্যাটি হ'ল তারা রেজেক্স ব্যবহার করছে এবং এখনও প্রথম সমস্যাটি সমাধান করে নি, সুতরাং 2 টি সমস্যা।
পদক্ষেপ

24
@Euphoric - আসলে, ভাল কোড হল কিন্তু cryptically সংক্ষিপ্ত ছাড়া - সংক্ষিপ্ত।
স্টিভ 314

24
@ আইকিউআন্দ্রেয়াস: আমি মনে করি এটি অর্ধ-হাস্যকর হওয়ার উদ্দেশ্য। যে মন্তব্যটি করা হচ্ছে তা হ'ল আপনি যদি সাবধান না হন তবে নিয়মিত প্রকাশের সাহায্যে জিনিসগুলি আরও ভাল করার পরিবর্তে আরও খারাপ করতে পারে।
হতাশ

145
কিছু লোক, কিছু ব্যাখ্যা করার চেষ্টা করার সময়, "আমি জানি, আমি একটি জেমি জাওনস্কি উক্তি ব্যবহার করব" think এখন তাদের দুটি বিষয় ব্যাখ্যা করার আছে।
অবশেষে

উত্তর:


220

কিছু প্রোগ্রামিং প্রযুক্তির সাধারণত প্রোগ্রামারদের (দ্বারা ভালভাবে বোঝা যায় না রেগুলার এক্সপ্রেশনের , ফ্লোটিং পয়েন্ট , পার্ল , awk , আইওসি ... এবং অন্যদের )।

সমস্যার সঠিক সেট সমাধানের জন্য এগুলি আশ্চর্যজনকভাবে শক্তিশালী সরঞ্জাম হতে পারে। বিশেষত নিয়মিত ভাষাগুলি নিয়মিত ভাষার সাথে মিলে যায় very সমস্যাটির জটিলতা রয়েছে: একটি নিয়মিত ভাষা কীভাবে বর্ণনা করতে হয় তা খুব কম লোকই জানেন (এটি কম্পিউটার বিজ্ঞানের তত্ত্ব / ভাষাবিজ্ঞানের অংশ যা মজার চিহ্নগুলি ব্যবহার করে - আপনি চমস্কি শ্রেণিবিন্যাসে এটি সম্পর্কে পড়তে পারেন )।

এই জিনিসগুলির সাথে কাজ করার সময়, আপনি যদি এগুলি ভুল ব্যবহার করেন তবে সম্ভবত আপনার আসল সমস্যাটি সমাধান করেছেন এমন সম্ভাবনা কম। একটি ব্যবহার এইচটিএমএল মেলে রেগুলার এক্সপ্রেশন (ক পর্যন্ত খুব সাধারণ সংঘটন) মানে হবে এই যে আপনি হবে প্রান্ত মামলা মিস করি। এবং এখন, আপনি এখনও আসল সমস্যাটি পেয়েছেন যা আপনি সমাধান করেন নি এবং ভুল সমাধান ব্যবহার করে প্রবর্তিত করা হয়েছে এমন আরও একটি সূক্ষ্ম বাগ around

এর অর্থ এই নয় যে নিয়মিত প্রকাশগুলি ব্যবহার করা উচিত নয়, বরং তারা কী সমস্যার সমাধান করতে পারে এবং সমাধান করতে পারে না এবং সেগুলি ন্যায়বিচারের সাথে ব্যবহার করতে পারে না তা বোঝার জন্য কাজ করা উচিত।

সফ্টওয়্যার রক্ষণাবেক্ষণের মূল কীটি রক্ষণাবেক্ষণযোগ্য কোড লেখা writing নিয়মিত এক্সপ্রেশন ব্যবহার করা সেই লক্ষ্যের বিপরীতে হতে পারে। নিয়মিত এক্সপ্রেশন নিয়ে কাজ করার সময়, আপনি একটি বিশেষ ডোমেন নির্দিষ্ট ভাষায় একটি মিনি কম্পিউটার (বিশেষত একটি অ-বিড়ম্বনকারী সসীম রাষ্ট্র অটোমেটন ) লিখেছেন । এই ভাষায় 'হ্যালো ওয়ার্ল্ড' সমতুল্য লেখা সহজ এবং এতে আধ্যাত্মিক আত্মবিশ্বাস অর্জন করা সহজ, তবে অতিরিক্ত বাগগুলি সনাক্ত করা এবং সংশোধন করা খুব কঠিন হতে পারে এমন লেখাগুলি এড়াতে নিয়মিত ভাষার বোঝার সাথে আরও মনোযোগ দেওয়া দরকার (কারণ) তারা নিয়মিত ভাব প্রকাশের প্রোগ্রামটির অংশ নয়)।

সুতরাং এখন আপনি একটি নতুন সমস্যা পেয়েছেন; আপনি এটি সমাধান করার জন্য নিয়মিত অভিব্যক্তির সরঞ্জামটি বেছে নিয়েছিলেন (যখন এটি অনুপযুক্ত) এবং আপনার কাছে এখন দুটি বাগ পেয়েছে, উভয়ই খুঁজে পাওয়া শক্ত, কারণ এগুলি বিমূর্ততার অন্য স্তরে লুকানো রয়েছে।


8
আমি নিশ্চিত নই যে পার্ল নিজেই প্রযুক্তির তালিকায় রয়েছে যা প্রোগ্রামারদের দ্বারা ভালভাবে বোঝা যায় না;)
ক্রড

21
@ ক্র্যাড এর আরও বেশি যে পার্ল সম্পর্কেও বলা হয়েছে ... অনেক লোকই শুনেছেন এটি জনপ্রিয় হয়েছে। আমি এখনও র‌্যান্ড আলাপের ভাসমান পয়েন্টটি পছন্দ করি: "এখন আপনার কাছে 2.00000152 সমস্যা আছে"

56
@ ক্র্যাড কিছু লোক, যখন কোনও সমস্যার মুখোমুখি হয়, তখন "আমি জানি, আমি পার্ল ব্যবহার করব" think এখন তাদের $ (^ @ #% () ^%) (#) সমস্যা আছে।
মাইকেল হ্যাম্পটন

4
@ জেনস যদি কিছু থাকে তবে পিসিআরই বনাম traditionalতিহ্যবাহী রেজেক্সের অতিরিক্ত শক্তি এটিকে আরও লোভনীয় সমাধান এবং এটি বজায় রাখা আরও কঠিন করে তোলে । পিসিআরই যে সুনির্দিষ্ট অটোমেটাটির সাথে মেলে তা সুনির্দিষ্টভাবে পার্ল-সামঞ্জস্যপূর্ণ নিয়মিত এক্সপ্রেশনগুলিতে মেলে ফাইনেট অটোম্যাটাকে প্রসারিত করে ... এবং এটি একটি অ-তুচ্ছ জিনিস। অন্ততপক্ষে traditionalতিহ্যবাহী রেজেক্সের সাথে, প্রয়োজনীয় ধারণাগুলি বুঝতে পারলে কেউ খুব বেশি ঝামেলা ছাড়াই মাথা ঘুরিয়ে নিতে পারে ।

6
আপনি একটি ভাল পয়েন্ট করা। নিয়মিত প্রকাশগুলি কার্যকরভাবে একটি দ্বিতীয়, তুচ্ছ-তুচ্ছ ভাষা। এমনকি যদি মূল প্রোগ্রামার মূল ভাষায় দক্ষ হয় এবং ব্যবহৃত রেগেক্সের স্বাদ ব্যবহার করে, "দ্বিতীয় ভাষায়" যুক্ত মানে নিম্ন প্রতিক্রিয়া হয় যা রক্ষণাবেক্ষণকারীরা উভয়ই জানতে পারবেন। রেজেক্স পঠনযোগ্যতা প্রায়শই "হোস্ট" ভাষার চেয়ে কম থাকে তা উল্লেখ করার দরকার নেই।
জেএস।

95

নিয়মিত এক্সপ্রেশন - বিশেষত অপ্রচলিত কোডগুলি - কোড করা, বোঝা এবং বজায় রাখা সম্ভবত সম্ভাব্য। আপনাকে কেবল স্ট্যাক ওভারফ্লো ট্যাগযুক্ত প্রশ্নের সংখ্যা দেখতে হবে [regex]যেখানে প্রশ্নকর্তা ধরে নিয়েছেন যে তাদের সমস্যার উত্তর একটি রেজেক্স এবং পরবর্তীকালে আটকে গিয়েছে। অনেক ক্ষেত্রেই সমস্যাটি (এবং সম্ভবত হওয়া উচিত) অন্যভাবে সমাধান করা যেতে পারে।

এর অর্থ হ'ল, যদি আপনি একটি রেজেেক্স ব্যবহার করার সিদ্ধান্ত নেন তবে আপনার এখন দুটি সমস্যা রয়েছে:

  1. মূল সমস্যাটি আপনি সমাধান করতে চেয়েছিলেন।
  2. একটি রেজেক্সের সমর্থন।

মূলত, আমি মনে করি তার অর্থ হ'ল যদি আপনার সমস্যা সমাধানের অন্য কোনও উপায় না থাকে তবে আপনার কেবলমাত্র একটি রেজেক্স ব্যবহার করা উচিত। আর একটি সমাধান সম্ভবত কোড করা, বজায় রাখা এবং সমর্থন করা সহজ হতে চলেছে। এটি ধীর বা কম দক্ষ হতে পারে, তবে এটি রক্ষণাবেক্ষণ এবং সহায়তার ক্ষেত্রে সহজ স্বাচ্ছন্দ্য না হওয়া উচিত ওভারাইডিং উদ্বেগ be


27
এবং আরও খারাপ: তারা এইচটিএমএলের মতো জিনিসগুলি পার্স করার জন্য তাদের ব্যবহার করার চেষ্টা করার প্রবণতা হিসাবে যথেষ্ট শক্তিশালী। "আমি এইচটিএমএলকে কীভাবে পার্স করব?" এ এসওতে অসংখ্য প্রশ্ন দেখুন?
ফ্র্যাঙ্ক শেয়ার

6
নির্দিষ্ট পরিস্থিতিতে জন্য রেজেক্স দুর্দান্ত। অন্যান্য অনেক ক্ষেত্রে তেমন কিছু হয় না। অন্য প্রান্তে এটি হতাশার এক ভয়াবহ গর্ত। সমস্যাটি প্রায়শই দেখা দেয় যখন কেউ প্রথমবারের মতো তাদের সম্পর্কে জানতে পারে এবং সর্বত্র অ্যাপ্লিকেশনগুলি দেখতে শুরু করে। আরেকটি বিখ্যাত উক্তি: "যখন আপনার কাছে কেবলমাত্র হাতিয়ারটি হাতুড়ি হয় তখন সমস্ত কিছুই পেরেকের মতো লাগে।"
টড উইলিয়ামসন

3
এর অর্থ কি এসও [সি #] ট্যাগের প্রশ্নের সংখ্যা অনুসারে, এটি বোঝার জন্য সবচেয়ে কঠিন প্রোগ্রামিং ভাষা?

2
আমি স্ট্রিং পদ্ধতিগুলিতে দীর্ঘ সিরিজের কলগুলির চেয়ে একটি জটিল নিয়মিত প্রকাশ দেখতে পাচ্ছি। ওতো, জটিল ভাষাগুলি পার্স করতে নিয়মিত প্রকাশের অপব্যবহার দেখে আমি সত্যিই ঘৃণা করি।
কেভিন cline

5
"মূলত, আমি মনে করি তার অর্থ হ'ল যদি আপনার সমস্যা সমাধানের কোনও উপায় না থাকে তবে আপনার কেবলমাত্র একটি রেজিেক্স ব্যবহার করা উচিত। অন্য কোনও সমাধান কোড, রক্ষণাবেক্ষণ এবং সমর্থন করা সহজ হতে চলেছে।" - গুরুতরভাবে অসম্মতি .. রেজেক্সসগুলি দুর্দান্ত সরঞ্জাম, আপনাকে কেবল তাদের সীমাটি জানতে হবে know রেগেক্সগুলির সাথে অনেকগুলি কাজ আরও মার্জিতভাবে কোড করা যায়। (তবে, কেবল উদাহরণ দেওয়ার জন্য আপনাকে এগুলি এইচটিএমএল বিশ্লেষণের জন্য ব্যবহার করা উচিত নয়)
করোলি হরভাথ

69

এটি বেশিরভাগই জিভ-ইন-গাল রসিকতা, যদিও সত্যের দানা থাকে।

কিছু কাজ রয়েছে যার জন্য নিয়মিত প্রকাশগুলি একটি দুর্দান্ত ফিট। আমি একবারে নিয়মিত এক্সপ্রেশন দিয়ে ম্যানুয়ালি লিখিত রিকার্সি ডেসেন্ট পার্সার কোডের 500 টি লাইন প্রতিস্থাপন করেছি যা পুরোপুরি ডিবাগ হতে প্রায় 10 মিনিট সময় নেয়। লোকেরা বলে যে রেজেক্সগুলি বোঝা এবং ডিবাগ করা শক্ত, তবে যথাযথভাবে প্রয়োগ হওয়া একটি বিশাল হাত-ডিজাইন করা পার্সার হিসাবে ডিবাগ করা প্রায় কঠিন নয়। আমার উদাহরণস্বরূপ, নন-রেজেক্স সমাধানের সমস্ত প্রান্তের মামলাগুলি ডিবাগ করতে দুই সপ্তাহ সময় লেগেছিল।

তবে আঙ্কেল বেনকে প্যারাফ্রেজ করতে:

মহান অভিব্যক্তি সঙ্গে মহান দায়িত্ব আসে।

অন্য কথায়, রেইজেক্সগুলি আপনার ভাষার সাথে ভাব প্রকাশ করে তবে কোনও নির্দিষ্ট কাজের জন্য এক্সপ্রেশনটির সর্বাধিক পঠনযোগ্য পদ্ধতিটি বেছে নেওয়ার জন্য প্রোগ্রামারকে এটি আরও বেশি দায়বদ্ধ করে।

কিছু জিনিস প্রাথমিকভাবে নিয়মিত প্রকাশের জন্য ভাল কাজের মতো দেখায় তবে তা হয় না। উদাহরণস্বরূপ, নেস্টেড টোকেন সহ যে কোনও কিছুই যেমন এইচটিএমএল। একটি সহজ পদ্ধতি আরও স্পষ্ট হয়ে উঠলে কখনও কখনও লোকেরা নিয়মিত ভাব প্রকাশ করে। উদাহরণস্বরূপ, string.endsWith("ing")সমতুল্য রেজেক্সের চেয়ে বোঝা সহজ। কখনও কখনও লোকেরা একটি বৃহত সমস্যাটিকে একটি একক রেজেক্সে ছড়িয়ে দেওয়ার চেষ্টা করে, যেখানে এটি টুকরো টুকরো করা আরও উপযুক্ত। কখনও কখনও লোকেরা একই কাজ করার জন্য একটি নামকৃত ফাংশন তৈরি করার পরিবর্তে (সম্ভবত একটি রেজেক্সের সাহায্যে অভ্যন্তরীণভাবে প্রয়োগ করা হয়) পরিবর্তে একটি রেজেেক্স পুনরাবৃত্তি করে যথাযথ বিমূর্ততা তৈরি করতে ব্যর্থ হয়।

কিছু কারণে রেগেক্সদের একক দায়িত্ব এবং ডিআরওয়াইয়ের মতো সাধারণ সফ্টওয়্যার ইঞ্জিনিয়ারিং নীতিগুলির অন্ধ স্পট তৈরি করার এক অদ্ভুত প্রবণতা রয়েছে। এ কারণেই এমনকি যারা তাদের ভালবাসেন তাদেরও মাঝে মাঝে সমস্যাযুক্ত মনে হয়।


10
চাচা বেন কি "প্রতিবারের মতো পারফেক্ট ফলাফল" বলেছিলেন? সম্ভবত সেই কারণেই লোকেরা রেজিজেস নিয়ে এতটাই ট্রিগার খুশি হয় ...
আন্দ্রেজেড ডয়েল

4
এইচটিএমএল সম্পর্কিত রিজেক্সের সমস্যাটি যা অনভিজ্ঞ ডেভেলপারদের ট্রিপ করে দেয় তা হ'ল এইচটিএমএলটির একটি প্রসঙ্গমুক্ত ব্যাকরণ রয়েছে, নিয়মিত নয়: কিছু সাধারণ HTML (বা এক্সএমএল) পার্সিংয়ের জন্য রেজেক্স ব্যবহার করা যেতে পারে (যেমন একটি নামযুক্ত অ্যাঙ্কর ট্যাগ থেকে URL টি দখল করা), তবে জটিল কোনও কিছুর জন্য উপযুক্ত নয়। তার জন্য, ডম পার্সিং আরও উপযুক্ত। সম্পর্কিত পঠন: চমস্কি শ্রেণিবিন্যাস

53

জেফ আতউড এই খুব উক্তিটি নিয়ে আলোচনা করে একটি ব্লগ পোস্টে একটি আলাদা ব্যাখ্যা প্রকাশ করেছেন: নিয়মিত প্রকাশ: এখন আপনার দুটি সমস্যা আছে ( লিঙ্কটির জন্য ইউফোরিককে ধন্যবাদ )

আসল 1997 থ্রেডে জেমির পোস্টগুলির সম্পূর্ণ পাঠ্য বিশ্লেষণ করে, আমরা নিম্নলিখিতটি পাই:

পার্লের প্রকৃতি প্রায় সমস্ত অন্যান্য কৌশল বাদে নিয়মিত প্রকাশের ব্যবহারকে উত্সাহ দেয়; এগুলি বিন্দু এ থেকে বিন্দু বিতে যাওয়ার "সর্বাধিক সুস্পষ্ট" (কমপক্ষে, এমন লোকদের পক্ষে যারা আরও ভাল জানেন না) তাদের কাছে খুব দূরে way

প্রথম উদ্ধৃতিটি গুরুত্ব সহকারে নেওয়া যায় না gl তবে এটি, আমি সম্পূর্ণরূপে একমত এখানে জেমি যে বিষয়টি তৈরি করার চেষ্টা করছিলেন তা হল: নিয়মিত প্রকাশগুলি খারাপ নয়, তবে নিয়মিত প্রকাশের অতিরিক্ত ব্যবহার করা খারাপ।

এমনকি আপনি যদি না সম্পূর্ণরূপে রেগুলার এক্সপ্রেশনের বুঝতে, আপনি মধ্যে চালানো গোল্ডেন হাতুড়ি সমস্যা, রেগুলার এক্সপ্রেশন, সঙ্গে একটি সমস্যা সমাধানের চেষ্টা যখন এটা সহজ এবং আরো নিয়মিত কোড সহ একই জিনিস করে (এছাড়াও দেখুন স্পষ্ট হয়ে যেত CodingHorror: Regex ব্যবহার বনাম রেজেক্স অপব্যবহার )।

আর একটি ব্লগ পোস্ট রয়েছে যা উদ্ধৃতিটির প্রসঙ্গটি দেখে এবং আটউডের চেয়ে আরও বিশদে যায়: জেফ্রি ফ্রেডেলের ব্লগ: বিখ্যাত "এখন আপনার দুটি সমস্যা আছে" এর উত্সের উত্স


3
এটি আমার মনে সর্বোত্তম উত্তর কারণ এটি প্রসঙ্গে যুক্ত করে। জেজেডজেটের রেজেক্সের সমালোচনা পার্ল সম্পর্কে যতটা ছিল তেমন কিছুই ছিল।
এভিক্যাটস

3
@ অ্যাভিটাকোস একই ব্লগ পোস্টে একই 1997 থ্রেডে আরও গবেষণা করা হয়েছিল: regex.info/blog/2006-09-15/247
আইকিউ আন্দ্রেয়াস

30

এই উদ্ধৃতিটি নিয়ে কয়েকটি জিনিস চলছে।

  1. উদ্ধৃতি আগের তামাশা একটি restatement হল:

    যখনই কোনও সমস্যার মুখোমুখি হন, কিছু লোক "AWK ব্যবহার করতে দেয়" বলে say এখন তারা দুটি সমস্যা আছে. - ডি টিলব্রুক

    এটি একটি রসিকতা এবং একটি সত্য খনন, তবে এটি রেগেক্সকে অন্যান্য খারাপ সমাধানের সাথে যুক্ত করে একটি খারাপ সমাধান হিসাবে হাইলাইট করার একটি উপায়। এটি দুর্দান্ত হা হা শুধুমাত্র গুরুতর মুহূর্ত।

  2. আমার মনে হ'ল, এই উদ্ধৃতিটি উদ্দেশ্যমূলকভাবে ব্যাখ্যার জন্য উন্মুক্ত — অর্থটি সরাসরি এগিয়ে। কেবল একটি নিয়মিত এক্সপ্রেশন ব্যবহারের ধারণাটি ঘোষণার ফলে সমস্যার সমাধান হয়নি। এছাড়াও, আপনি যে ভাষা ব্যবহার করছেন তা থেকে পৃথক হয়ে থাকা বিধিগুলি সহ একটি অতিরিক্ত ভাষা যুক্ত করে আপনি কোডটির জ্ঞানীয় জটিলতা বৃদ্ধি করেছেন।

  3. যদিও রসিকতা হিসাবে মজার, আপনার একটি অ-রেজেক্স সমাধানের জটিলতার সাথে রেজেক্স সমাধানের জটিলতা + রেজেক্সগুলি সহ অতিরিক্ত জটিলতার সাথে তুলনা করতে হবে। রেজেক্সস যুক্ত করার অতিরিক্ত ব্যয় থাকা সত্ত্বেও, একটি রেজেক্সের সাহায্যে সমস্যা সমাধান করা সার্থক হতে পারে।


21

RegularExpressionsarenoworsetoreadormaintainthananyotherunformattedcontent; indeedaregexisprobablyeasiertoreadthanthispieceoftexthere-butunfortunatelytheyhaveabadreputationbecausesomeimplementationsdon'tallowformattingandpeopleingeneraldon'tknowthatyoucandoit।

(নিয়মিত এক্সপ্রেশনগুলি অন্য যে কোনও অপ্রত্যাশিত সামগ্রীর চেয়ে পড়া বা বজায় রাখা খারাপ নয়; প্রকৃতপক্ষে একটি রেজেক্স সম্ভবত এখানে এই পাঠ্যের টুকরোটির চেয়ে পড়া সহজ - তবে দুর্ভাগ্যক্রমে তাদের একটি খারাপ খ্যাতি রয়েছে কারণ কিছু বাস্তবায়ন ফর্ম্যাট করতে দেয় না এবং সাধারণভাবে মানুষকে আপনি এটি করতে পারেন তা জানেন না))


এখানে একটি তুচ্ছ উদাহরণ:

^(?:[^,]*+,){21}[^,]*+$


যা সত্যিই পড়া বা বজায় রাখা এতটা কঠিন নয়, তবে এটির মতো দেখতে এটি আরও সহজ:

(?x)    # enables comments, so this whole block can be used in a regex.
^       # start of string

(?:     # start non-capturing group
  [^,]*+  # as many non-commas as possible, but none required
  ,       # a comma
)       # end non-capturing group
{21}    # 21 of previous entity (i.e. the group)

[^,]*+  # as many non-commas as possible, but none required

$       # end of string

এটি একটি শীর্ষ-উদাহরণের সামান্য বিষয় (মন্তব্য $করা মন্তব্য করার অনুরূপ i++) তবে স্পষ্টতই এটি পড়তে, বুঝতে এবং বজায় রাখতে কোনও সমস্যা হওয়া উচিত নয়।


এতক্ষণ আপনি যখন পরিষ্কার হন যে কখন নিয়মিত ভাব প্রকাশ করা যায় এবং যখন তারা কোনও খারাপ ধারণা হয় তবে এগুলিতে কোনও সমস্যা নেই এবং বেশিরভাগ সময় জেডব্লুজেডের উক্তিটি সত্যই প্রয়োগ হয় না।


1
অবশ্যই, তবে আমি রেগেক্সের গুণাবলীর বিষয়ে আলোচনা খুঁজছি না, এবং আমি এই আলোচনাটি সেভাবেই দেখতে চাই না। আমি কী বুঝতে পারছিলাম তা বোঝার চেষ্টা করছি।
পল বিগগার

1
তারপরে লিভিবেটারের মন্তব্যে লিঙ্কটি আপনাকে জানার দরকার যা বলে দেয়। এই প্রতিক্রিয়াটি কেবল ইঙ্গিত করছে যে রেজেক্সগুলি অস্পষ্ট হওয়ার দরকার নেই, এবং এইভাবে উদ্ধৃতিটি বাজে কথা।
পিটার বুফটন

8
ব্যবহার করার *+কী লাভ? কীভাবে এটি বিচারের চেয়ে আলাদা (কার্যকরী) *?
টিমউই

1
আপনি যা বলছেন তা সত্য হতে পারে তবে এই নির্দিষ্ট প্রশ্নের উত্তর দেয় না। আপনার উত্তরটি "আমার মতে উদ্ধৃতিটি সাধারণত সত্য হয় না" -এ উত্থিত হয়। প্রশ্নটি সত্য বা না তা নিয়ে নয়, তবে উদ্ধৃতিটির অর্থ কী।
ব্রায়ান ওকলি

2
*+এই ক্ষেত্রে আক্ষরিকভাবে করার কোনও অর্থ নেই ; সবকিছু নোঙ্গরযুক্ত এবং অটোমেটনের মাধ্যমে একক পাসে মেলা যায় যা 22 পর্যন্ত গণনা করতে পারে those অ-কমা সেটগুলিতে সঠিক সংশোধকটি কেবল সাধারণ পুরানো *। (আরও বড় কথা, লোভী এবং অ-লোভী মিলে যাওয়া অ্যালগরিদমের মধ্যেও কোনও পার্থক্য থাকা উচিত না It's এটি অত্যন্ত সাধারণ ঘটনা))
ডোনাল ফেলো

14

ক্রিসএফের উত্তর ছাড়াও - যে নিয়মিত এক্সপ্রেশনগুলি "কোড করা, বোঝা এবং রক্ষণাবেক্ষণ করা কঠিন", আরও খারাপ: তারা এইচটিএমএল এর মতো জিনিসগুলিকে পার্স করার জন্য তাদের ব্যবহার করার চেষ্টা করার পক্ষে যথেষ্ট শক্তিশালী। "আমি এইচটিএমএলকে কীভাবে পার্স করব?" এ এসওতে অসংখ্য প্রশ্ন দেখুন? উদাহরণস্বরূপ, এসও এর মধ্যে একক অতি মহাকাব্যিক উত্তর !


14

নিয়মিত প্রকাশগুলি খুব শক্তিশালী তবে তাদের একটি ছোট এবং একটি বড় সমস্যা রয়েছে; এগুলি লেখা শক্ত এবং পড়া অসম্ভব।

সর্বোত্তম ক্ষেত্রে নিয়মিত প্রকাশের ব্যবহার সমস্যার সমাধান করে, তাই আপনার কাছে কেবল জটিল কোডটির রক্ষণাবেক্ষণের সমস্যা রয়েছে। আপনি যদি নিয়মিত এক্সপ্রেশনটি ঠিক ঠিক না পান তবে আপনার আসল সমস্যা এবং অপঠনযোগ্য কোডের সাথে সমস্যা রয়েছে যা কাজ করে না।

কখনও কখনও নিয়মিত এক্সপ্রেশনকে কেবল লেখার কোড হিসাবে উল্লেখ করা হয়। নিয়মিত অভিব্যক্তির মুখোমুখি হয়েছে যা ফিক্সিংয়ের প্রয়োজন, ভাবটি বোঝার চেষ্টা করার চেয়ে স্ক্র্যাচ থেকে শুরু করা প্রায়শই দ্রুত হয়।


1
আসল সমস্যাটি হ'ল রেজেক্সপ্সগুলি উদাহরণস্বরূপ একটি পার্সার প্রয়োগ করতে পারে না কারণ তারা বর্তমানে কতটা ঘৃণিত সেগুলি গণনা করতে পারে না।

4
@ থরবজর্ন রাভন অ্যান্ডারসন: এটি সমস্যার চেয়ে সীমাবদ্ধতা বেশি। এটির জন্য যদি আপনি নিয়মিত ভাব প্রকাশ করার চেষ্টা করেন তবে এটি কেবল একটি সমস্যা এবং তারপরে এটি নিয়মিত প্রকাশের ক্ষেত্রে সমস্যা নয়, এটি আপনার পদ্ধতিটির পছন্দ হিসাবে সমস্যা।
গুফা

1
আপনি লেক্সারের জন্য ঠিক আরইএস ব্যবহার করতে পারেন (ভাল, বেশিরভাগ ভাষার জন্য) তবে টোকেন স্ট্রিমটিকে একটি পার্স গাছের (যেমন পার্সিং ) একত্রিত করা আনুষ্ঠানিকভাবে তাদের বাইরে is
ডোনাল ফেলো

10

সমস্যাটি হ'ল রেজেক্স একটি জটিল জন্তু এবং আপনি কেবলমাত্র সমস্যাটি সমাধান করেন যদি আপনি পুরোপুরিভাবে রেজেক্স ব্যবহার করেন। যদি আপনি এটি না করেন তবে আপনার 2 টি সমস্যা রয়েছে: আপনার আসল সমস্যা এবং রেজেক্স।

আপনি দাবি করেন যে এটি একশ লাইনের কোডের কাজ করতে পারে তবে আপনি এই যুক্তিটিও তৈরি করতে পারেন যে 100 লাইন স্পষ্ট, সংক্ষিপ্ত কোডটি রেজেক্সের এক লাইনের চেয়ে ভাল।

আপনার যদি এর কিছু প্রমাণ প্রয়োজন হয়: আপনি এই এসও ক্লাসিকটি পরীক্ষা করতে পারেন বা কেবল এসও রেজেক্স ট্যাগের মাধ্যমে ঝুঁটি নিতে পারেন


8
আপনার প্রথম বাক্যে কোনও দাবিই সত্য নয়। রেজেক্স বিশেষ জটিল নয় এবং এর সাথে সমস্যাগুলি সমাধান করার জন্য আপনাকে অন্য কোনও সরঞ্জামের মতো এটিকে পুরোপুরি জানতে হবে না need এটি কেবল এফইউডি। আপনার দ্বিতীয় অনুচ্ছেদটি সাধারণ হাস্যকর: অবশ্যই আপনি তর্ক করতে পারেন। তবে এটি ভাল নয়।
কনরাড রুডলফ

1
@KonradRudolph আমি মনে করি আসলে সেখানে অসংখ্য Regex প্রজন্মের এবং বৈধতা সরঞ্জাম যে Regex দেখানোর জন্য যায় হয় একটি জটিল প্রক্রিয়া। এটি মানব পাঠযোগ্য নয় (ডিজাইনের মাধ্যমে) এবং রেগেক্স ব্যবহার করে এমন একটি কোডের টুকরো সংশোধন বা লেখার জন্য প্রবাহের সম্পূর্ণ পরিবর্তনের কারণ হতে পারে। দ্বিতীয় অংশ হিসাবে, আমি মনে করি এটি পিএসইয়ের উপর জ্ঞানের বিস্তৃত দলবদ্ধকরণ থেকে এবং "ডিবাগিং কোড এটি লেখার চেয়ে দ্বিগুণ শক্ত, তাই আপনি সবচেয়ে চালাক কোডটি লিখতে পারলে এটি স্পষ্ট বলে মনে হয়" সংজ্ঞা অনুসারে, এটিকে ডিবাগ করার পক্ষে যথেষ্ট স্মার্ট নয় "
অ্যাম্পট

2
এটি সঠিক যুক্তি নয়। হ্যাঁ, নিশ্চিত রেজেক্স জটিল are তবে অন্যান্য প্রোগ্রামিং ভাষাও তাই। অন্যান্য ভাষার চেয়ে রেজেজেক্স যথেষ্ট কম জটিল এবং অন্যান্য ভাষার জন্য যে সরঞ্জামগুলি রেগেক্সের জন্য বিদ্যমান তা বিকাশকারী সরঞ্জামগুলি দ্বারা বামন করা হয় (এফডাব্লুআইডাব্লু আমি রেজেক্সের সাথে ব্যাপকভাবে কাজ করি এবং আমি কখনও এ জাতীয় সরঞ্জাম ব্যবহার করি নি ...)। এটি একটি সহজ সত্য যে এমনকি জটিল রেজেক্সও সমান নন-রেজেক্স পার্সিং কোডের চেয়ে সহজ
কনরাড রুডলফ

@ কনরাড রুডল্ফ আমার মনে হয় তখন সহজ শব্দের সংজ্ঞা সম্পর্কে আমাদের মৌলিক মতপার্থক্য রয়েছে। আমি আপনাকে দেব যে রেজেক্স আরও দক্ষ বা আরও শক্তিশালী হতে পারে তবে আপনি যখন রেজেক্সের কথা ভাবেন তখন কারও মনে মনে সহজ শব্দটি আমি মনে করি না ।
11:54

হয়তো আমরা না কিন্তু আমার সংজ্ঞা অভিযোগ্য হল: আমি বজায় রাখার জন্য বোঝা সহজ, সহজ মানে সহজ নিতে, লুকানো বাগ ইত্যাদি কম সংখ্যা অবশ্যই একটি জটিল Regex এক নজরে হবে না খুব বোধগম্য দেখুন। তবে কোডের সমতুল্য নন-রেজেক্স পিসের ক্ষেত্রে এটি একই । আমি কখনও বলিনি যে রেজেক্স সহজ। আমি বলছি তারা সহজ - আমি তুলনা করছি। এটা জরুরি.
কনরাড রুডল্ফ

7

অর্থটির দুটি অংশ রয়েছে:

  • প্রথমত, আপনি মূল সমস্যাটি সমাধান করেন নি।
    এটি সম্ভবত এই সত্যটিকে বোঝায় যে নিয়মিত প্রকাশগুলি প্রায়শই সাধারণ সমস্যার অসম্পূর্ণ সমাধান দেয়।
  • দ্বিতীয়ত, আপনি এখন চয়ন করেছেন এমন সমাধানের সাথে যুক্ত অতিরিক্ত অসুবিধা যুক্ত করেছেন।
    নিয়মিত প্রকাশের ক্ষেত্রে, অতিরিক্ত অসুবিধা সম্ভবত জটিলতা, রক্ষণাবেক্ষণযোগ্যতা বা নিয়মিত ভাব প্রকাশের সাথে যুক্ত অতিরিক্ত অসুবিধাটিকে বোঝায় যা সমস্যার সমাধান করার কথা নয় fit

7

আপনি 2014 সালে এটির জন্য জিজ্ঞাসা করার সাথে সাথে, আজকের প্রেক্ষাপটের সাথে তুলনা করে 1997 এর প্রসঙ্গের প্রোগ্রামিং ভাষার আদর্শগুলিতে ফোকাস করা আকর্ষণীয় হবে। আমি এই বিতর্কটি এখানে প্রবেশ করব না তবে পার্ল এবং পার্ল সম্পর্কেই নিজের মতামত ব্যাপকভাবে পরিবর্তিত হয়েছে।

তবে 2013 প্রেক্ষাপটে থাকার ( ডি L'একটি coulé sous Les Ponts Eau depuis), আমি ব্যবহার উদ্ধৃতির মধ্যে পুনরাবৃত্তি ফোকাস করতে সুপারিশ করবে একটি বিখ্যাত xkcd কমিক জেমি Zawinski এক সরাসরি উদ্ধৃতি যে :

রেজেক্সেস, পার্ল এবং সমস্যাগুলি সম্পর্কে এক্সকেসিডি থেকে একটি কমিক

প্রথমে আমার এই কমিকটি বুঝতে সমস্যা হয়েছিল কারণ এটি জাভিনস্কির উদ্ধৃতি, এবং একটি জে-জেড গানের লিরিকের একটি উদ্ধৃতি এবং জিএনইউ program --help -zপতাকা 2 এর একটি উল্লেখ ছিল , সুতরাং এটি বুঝতে আমার পক্ষে এটি খুব বেশি সংস্কৃতি ছিল।

আমি জানতাম এটি মজাদার ছিল, আমি এটি অনুভব করছিলাম তবে কেন তা সত্যিই আমি জানতাম না। লোকেরা প্রায়শই পার্ল এবং রেইগেক্সস সম্পর্কে রসিকতা করে থাকে, বিশেষত যেহেতু এটি হিপস্টিস্ট প্রোগ্রামিং ভাষা নয়, কেন এটি মজাদার বলে মনে করা হচ্ছে তা সত্যিই জানেন না ... পার্ল স্নিগ্ধরা নির্বোধ কাজগুলি করার কারণে

সুতরাং প্রাথমিক উদ্ধৃতিটি ব্যথিত উপকরণগুলির সাথে প্রোগ্রামিংয়ের ফলে বাস্তব জীবনের সমস্যাগুলির (বেদনা?) ভিত্তিক একটি ব্যঙ্গাত্মক রসিক বলে মনে হচ্ছে। যেমন একটি হাতুড়ি কোনও রাজমিস্ত্রিটিকে আঘাত করতে পারে, এমন সরঞ্জামগুলির সাথে প্রোগ্রামিং করে যা কোনও বিকাশকারী বেছে নিতে পারে না যদি সে আঘাত করতে পারে (মস্তিষ্ক, অনুভূতি)। কখনও কখনও, কোন সরঞ্জামটি সবচেয়ে ভাল তা নিয়ে দুর্দান্ত বিতর্ক হয় তবে এটি প্রায় আপনার মূল্যহীন কারণ এটি আপনার স্বাদ বা আপনার প্রোগ্রামিং দলের স্বাদ , সাংস্কৃতিক বা অর্থনৈতিক কারণে সমস্যা। এটি সম্পর্কে আরও একটি দুর্দান্ত এক্সকেসিডি কমিক:

প্রোগ্রামিং সরঞ্জামগুলির বিতর্কগুলি সম্পর্কে এক্সকেসিডি থেকে একটি কমিক

আমি মানুষকে রেজেক্সগুলি সম্পর্কে বেদনা অনুধাবন করতে পারি এবং তারা বিশ্বাস করে যে রেজেক্সেসের জন্য ডিজাইন করা হয়েছে তার জন্য অন্য একটি সরঞ্জাম আরও ভাল উপযুক্ত। @ কার্ল-বিলেফেল্ট যেমন আপনার প্রশ্নের উত্তরটি দুর্দান্ত প্রকাশের সাথে উত্তর দেয় ততই বড় দায়বদ্ধতা আসে এবং এজন্য বিশেষতঃ রেজিক্সরা উদ্বিগ্ন। যদি কোনও বিকাশকারী কীভাবে রে-অ্যাক্সেসগুলির সাথে এস-ডিল করেন সেদিকে খেয়াল না রাখেন তবে শেষ পর্যন্ত কোডটি বজায় রাখার লোকেদের জন্য এটি ব্যথা হবে।

দামিয়ান কনউয়ের পার্ল বেস্ট প্র্যাকটিসেস (২০০৫-এর একটি বই) এর একটি আদর্শ উদাহরণ দেখানো একটি উদ্ধৃতি দ্বারা উদ্ধৃতি পুনর্নবীকরণ সম্পর্কে এই উত্তরটি শেষ করব ।

তিনি ব্যাখ্যা করেছেন যে এই ধরণের লেখার জন্য:

m{'[^\\']*(?:\\.[^\\']*)*'}

... এর মতো প্রোগ্রাম লেখার চেয়ে বেশি গ্রহণযোগ্য নয় :

sub'x{local$_=pop;sub'_{$_>=$_[0
]?$_[1]:$"}_(1,'*')._(5,'-')._(4
,'*').$/._(6,'|').($_>9?'X':$_>8
?'/':$")._(8,'|').$/._(2,'*')._(
7,'-')._(3,'*').$/}print$/x($=).
x(10)x(++$x/10).x($x%10)while<>;

তবে এটি আবার লেখা যেতে পারে , এটি এখনও সুন্দর নয় তবে কমপক্ষে এটি এখন টিকে আছে।

# Match a single-quoted string efficiently...
m{ '            # an opening single quote
    [^\\']*     # any non-special chars (i.e., not backslash or single quote)
    (?:         # then all of...`
    \\ .        # any explicitly backslashed char
    [^\\']*     #    followed by any non-special chars
    )*          # ...repeated zero or more times
    '           # a closing single quote
}x

এই জাতীয় আয়তক্ষেত্রাকার আকৃতির কোডটি হ'ল দ্বিতীয় সমস্যাটি নয় যা একটি পরিষ্কার, রক্ষণাবেক্ষণযোগ্য এবং পঠনযোগ্য উপায়ে ফর্ম্যাট করা যায় re


2
/* Multiply the first 10 values in an array by 2. */ for (int i = 0 /* the loop counter */; i < 10 /* continue while it is less than 10 */; ++i /* and increment it by 1 in each iteration */) { array[i] *= 2; /* double the i-th element in the array */ }
5gon12eder

6

কম্পিউটার বিজ্ঞান থেকে আপনার যদি একটি জিনিস শিখতে হবে তবে তা হ'ল চমস্কি শ্রেণিবিন্যাস । আমি বলব যে নিয়মিত প্রকাশের সাথে সমস্ত সমস্যাগুলি এর সাথে প্রসঙ্গ-মুক্ত ব্যাকরণকে বিশ্লেষণ করার প্রচেষ্টা থেকে আসে। আপনি যখন সিএফজিতে বাসা বাঁধার স্তরে সীমাবদ্ধতা চাপিয়ে দিতে (বা ভাবেন যে আপনি একটি সীমা চাপিয়ে দিতে পারেন), আপনি সেই দীর্ঘ এবং জটিল নিয়মিত প্রকাশ পেয়ে যাবেন।


1
হ্যাঁ! সিএস ব্যাকগ্রাউন্ডের অংশটি ব্যতীত যারা নিয়মিত প্রকাশগুলি শিখেন তারা সবসময় বুঝতে পারেন না যে কিছু কিছু আছে যা একটি রেজেক্স গাণিতিকভাবে করতে পারে না।
বেনজাদো

5

নিয়মিত ভাবগুলি পূর্ণ-স্কেল পার্সিংয়ের চেয়ে টোকেনাইজেশনের জন্য আরও উপযুক্ত।

তবে, আশ্চর্যজনকরকম একটি বড় সেট যা প্রোগ্রামারদের পার্স করতে হয় তা নিয়মিত ভাষা (বা আরও খারাপ, নিয়মিত ভাষার দ্বারা প্রায় বিশ্লেষণযোগ্য এবং যদি আপনি কেবল আরও কিছুটা কোড লিখেন ...) দ্বারা পার্সেবল হয়।

সুতরাং যদি কেউ "আহা" হিসাবে অভ্যস্ত হয় তবে আমার কাছে পাঠ্য আলাদা করে নেওয়া দরকার, আমি একটি নিয়মিত ভাব প্রকাশ করব ", যখন আপনাকে কোনও ধাক্কা-ডাউন অটোমেটনের কাছাকাছি কিছু দরকার হয়, তখন কোনও সিএফজি পার্সার অথবা আরও শক্তিশালী ব্যাকরণ। এটি সাধারণত কান্নায় শেষ হয়।

সুতরাং, আমি মনে করি উদ্ধৃতিটি এতটা গালি দেওয়ার মতো রেজেক্সপস নয়, তাদের ব্যবহার রয়েছে (এবং ভালভাবে ব্যবহার করা হয়েছে, তারা সত্যই খুব দরকারী) তবে রেগেক্সপসের উপর অতিরিক্ত নির্ভরতা (বা, বিশেষত, তাদের অবৈধ পছন্দ) ।


3

jwz কেবল এই উক্তিটি নিয়ে তার দালালের বাইরে। নিয়মিত প্রকাশগুলি কোনও ভাষার বৈশিষ্ট্যের চেয়ে আলাদা নয় - স্ক্রু করা সহজ, মার্জিতভাবে ব্যবহার করা শক্ত, সময়ে শক্তিশালী, সময়ে অনুপযুক্ত, প্রায়শই ভাল ডকুমেন্টেড, প্রায়শই দরকারী।

একই কথা ভাসমান পয়েন্ট গণিত, ক্লোজার, অবজেক্ট-ওরিয়েন্টেশন, অ্যাসিঙ্ক্রোনাস আই / ও, বা অন্য যে কোনও নামে আপনি নাম রাখতে পারেন। আপনি কী করছেন তা যদি না জানেন তবে প্রোগ্রামিং ভাষাগুলি আপনাকে দু: খিত করে তুলতে পারে।

আপনি যদি ভাবেন যে রেজেক্সেসগুলি পড়া খুব শক্ত, তবে প্রশ্নের মধ্যে থাকা প্যাটার্নটি গ্রাস করার জন্য সমপরিমাণ পার্সার বাস্তবায়ন পড়ার চেষ্টা করুন। প্রায়শই রেজেক্সেস জিতে থাকে কারণ তারা পুরো পার্সারগুলির চেয়ে কমপ্যাক্ট ... এবং বেশিরভাগ ভাষায়, তারা আরও দ্রুত।

নিয়মিত প্রকাশ (বা অন্য কোনও ভাষা বৈশিষ্ট্য) ব্যবহার থেকে বিরত থাকবেন না কারণ একটি স্ব-প্রচারকারী ব্লগার অযোগ্য বিবৃতি দিয়েছেন। নিজের জন্য জিনিস চেষ্টা করে দেখুন এবং আপনার জন্য কী কাজ করে তা দেখুন।


1
এফডাব্লুআইডাব্লু, ফ্লোটিং পয়েন্ট গাণিতিকটি ওয়েস্ট ইআরইএস এর চেয়ে বেশি জটিল, তবে এটি সহজ দেখায়। সতর্ক থাকুন! (কমপক্ষে জটিল আরইগুলি বিপজ্জনক দেখায় tend)
ডোনাল ফেলো

3

আমার প্রিয়, এর গভীরতর উত্তর বিখ্যাত রব পাইক একটি অভ্যন্তরীণ গুগল কোড মন্তব্য থেকে পুনরুত্পাদন করা একটি ব্লগ পোস্টে দিয়েছেন http : // and.html

সংক্ষিপ্তসারটি হ'ল এগুলি যে খারাপ তা নয় , তবে এগুলি প্রায়শই প্রয়োজনীয় কাজের জন্য উপযুক্ত নয় এমন কাজের জন্য ব্যবহৃত হয়, বিশেষত যখন লেক্সিং এবং কিছু ইনপুট পার্স করার বিষয়টি আসে।

নিয়মিত ভাব প্রকাশ করা শক্ত, ভাল লিখতে শক্ত এবং অন্য প্রযুক্তির তুলনায় ব্যয়বহুল হতে পারে ... অন্যদিকে লেক্সারস সঠিকভাবে লিখতে মোটামুটি সহজ (যদি সংক্ষিপ্তভাবে না হয়), এবং খুব সহজে পরীক্ষা করা যায়। বর্ণমালা শনাক্তকারীদের সন্ধানের বিষয়টি বিবেচনা করুন। রিজএক্সপ্যাক ("[a-ZA-Z _] [a-ZA-Z_0-9] *" এর মতো কিছু) লিখতে খুব বেশি কঠিন নয়, তবে সরল লুপ হিসাবে লিখতে খুব বেশি কষ্ট হয় না। লুপটির কার্যকারিতা যদিও অনেক বেশি হবে এবং কভারগুলির নীচে অনেক কম কোড জড়িত। একটি নিয়মিত এক্সপ্রেশন লাইব্রেরি একটি বড় জিনিস। পার্সে আইডেন্টিফায়ার ব্যবহার করে দুধের দোকানে যাওয়ার জন্য ফেরারি ব্যবহার করার মতো।

তিনি এর থেকেও আরও অনেক কিছু বলেছেন, নিয়মিত অভিব্যক্তিগুলি দরকারী হিসাবে যুক্তিযুক্ত, যেমন টেক্সট সম্পাদকদের মধ্যে নিদর্শনগুলির ডিসপোজেবল মেলিং তবে কমপ্লাইড কোডে খুব কমই ব্যবহার করা উচিত। এটি একটি পড়ার মূল্য।


0

এটি অ্যালান পেরিলিসের চিত্র # 34 সম্পর্কিত:

স্ট্রিংটি একেবারে ডেটা স্ট্রাকচার এবং যেখানেই এটি পাস করা হয় সেখানে প্রক্রিয়াটির অনেক বেশি সদৃশ হয়। এটি তথ্য গোপনের জন্য একটি নিখুঁত বাহন।

সুতরাং আপনি যদি আপনার ডেটা স্ট্রাকচার হিসাবে চরিত্রের স্ট্রিংটি বেছে নেন (এবং, প্রাকৃতিকভাবে, রেজেক্স-ভিত্তিক কোড এটির হেরফেরের জন্য অ্যালগরিদম হিসাবে) তবে এটি কাজ করেও আপনার একটি সমস্যা রয়েছে: ডেটার অনুপযুক্ত উপস্থাপনের চারপাশে খারাপ নকশা যা কঠিন is প্রসারিত এবং অদক্ষ।

তবে, প্রায়শই এটি কাজ করে না: মূল সমস্যাটি সমাধান হয় না, এবং সেই ক্ষেত্রে আপনার দুটি সমস্যা রয়েছে।


0

রেগেক্সগুলি তাত্ক্ষণিক ও নোংরা পাঠ্য পার্সিংয়ের জন্য ব্যাপকভাবে ব্যবহৃত হয়। এগুলি নিখুঁত প্রকাশের জন্য দুর্দান্ত সরঞ্জাম যা কেবল একটি সরল স্ট্রিং ম্যাচের চেয়ে কিছুটা জটিল।

তবে রেজিক্সগুলি আরও জটিল সার্ভারাল ইস্যুগুলি মাথা বাড়ানোর সাথে সাথে পেতে থাকে।

  1. রেজেক্সসের বাক্য গঠনটি সাধারণ মিলের জন্য অনুকূলিত হয়, বেশিরভাগ অক্ষর তাদের সাথে মেলে। এটি সাধারণ নিদর্শনগুলির জন্য দুর্দান্ত তবে একবার আপনি স্ট্রাকচার্ড কোডের চেয়ে লাইন গোলমালের মতো আরও কিছু খুঁজছেন এমন বাসা বাঁধার কয়েক স্তরেরও বেশি সময় শেষ করে। আমার ধারণা আপনি কোডের কাঠামোটি দেখানোর জন্য ইনডেন্টেশন এবং মন্তব্যগুলির সাথে আন্তঃপরিচয়যুক্ত স্ট্রিংগুলির একটি সিরিজ হিসাবে একটি রেজেক্স লিখতে পারেন তবে বাস্তবে এটি ঘটবে বলে বিরল বলে মনে হয়।
  2. শুধুমাত্র নির্দিষ্ট ধরণের পাঠ্য মেলাগুলি রেজিজেসের জন্য উপযুক্ত। প্রায়শই আপনি নিজেকে চিহ্নিত করেন যে কোনও ধরণের মার্কআপ ল্যাঙ্গুয়েজ কাজের জন্য দ্রুত এবং নোংরা রেগেক্স ভিত্তিক পার্সার পেয়েছেন তবে আপনি আরও কোণার কেসগুলি প্রচ্ছন্ন করার চেষ্টা করেন এবং আপনি দেখতে পেলেন যে রেজেক্সগুলি আরও জটিল এবং কম এবং কম পঠনযোগ্য হয়ে উঠছে
  3. একটি রেজেক্সের সময় জটিলতা অ-ভোভাস হতে পারে। এটি মেলে এমন দুর্দান্ত কাজ করে এমন একটি প্যাটার্ন দিয়ে শেষ করা খুব কঠিন নয় তবে মিল না হওয়ার কয়েকটি ক্ষেত্রে O (2 ^ n) জটিলতা রয়েছে

সুতরাং এটি কোনও পাঠ্য প্রক্রিয়াজাতকরণ সমস্যাটি দিয়ে শুরু করা খুব সহজ it আসল সমস্যা

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.