নিয়মিত প্রকাশগুলি এত মারাত্মক আকর্ষণীয় কেন?


23

প্রদর্শন 1 , 2 প্রদর্শন , আমি অনুমান করি যে আপনি অন্যান্য উদাহরণগুলি স্মরণ করা কঠিন হবে না।

কথাটি হ'ল: যদি সমস্যার সমাধানের একাধিক উপায় থাকে তবে পিএইচপি প্রোগ্রামার (আমি সাধারণত স্ট্যাকওভারফ্লোতে পিএইচপি ট্যাগটি ব্রাউজ করি) নিয়মিত অভিব্যক্তি জড়িত সমাধানের জন্য সহায়তা চাইবে।

এমনকি যখন এটি কম অর্থনৈতিক হবে তখনও যখন পিএইচপি ম্যানুয়ালটি কোনও লিঙ্কেরstr_replace পরিবর্তে ব্যবহার করার পরামর্শ দেয় ( লিঙ্ক ) preg_*বা ereg_*যখন কোনও অভিনব প্রতিস্থাপনের নিয়ম প্রয়োজন হয় না।

কেন এমন হয় সে সম্পর্কে কারও কি ধারণা আছে?

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


2
আপনি পিএইচপি ম্যানুয়াল আসলে কি বলে তা উদ্ধৃত করতে চাইতে পারেন।
ক্রিসএফ

1
কারণ তারা ক্রিপ্টিক, তাই আপনি কি একচেটিয়া কাওল কিডজ ক্লাবের অংশ হতে চান? এবং বেশিরভাগ কারণেই তারা কোনও মিল বা এক্সট্রাকশন প্রকাশের জন্য একটি ছোট উপায় সরবরাহ করে যা তাদের জন্য তৈরি করা হয় made ডামি মামলার ক্ষেত্রে নিশ্চিত, কাস্টম পার্সিং আরও ভাল হলে, তবে দ্রুত রেজিেক্স লেখার সময় সময়টি রেগেক্সের পক্ষে।
হাইলেম

আপনি এই শেষ বাক্যটির ভুল অংশটির উপর জোর দিয়েছিলেন: এর ক্ষোভজনক অংশটি "এইচটিএমএল থেকে", "পিএইচপি-তে" নয়।
ইজকাটা

উত্তর:


20

নিয়মিত প্রকাশগুলি এত মারাত্মক আকর্ষণীয় কেন?

কারণ অবচেতন স্তরে তারা একটি সম্পূর্ণ স্মার্ট প্রোগ্রামের মতো বোধ করে যিনি নিজেকে অন্তর্ভুক্ত করে এবং স্ব-সামঞ্জস্য করার সময় (নিজস্ব নিদর্শনগুলি) নিজেরাই অনেক কিছু অর্জন করতে পারেন।

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

যাদু শক্তিযুক্ত একটি ক্ষুদ্র জিনিস। আপনি না বলতে পারবেন না, পারবেন তো?


5
+1 - একটি ক্ষুদ্র রহস্যজনক জিনিস, কম নয়।
এজে জনসন

Hobitses কৌশলপূর্ণ
বেন DeMott

49

আপনার কাছে থাকা একমাত্র সরঞ্জামটি যখন একটি রেজেেক্স হয়, তখন প্রতিটি সমস্যা দেখতে মনে হয় ^((?>[a-zA-Z\d!#$%&'*+\-/=?^_{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_{|}~]+)+|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$


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

1
@ ডেভ, এটি প্রচুর অর্থবোধ করে। আমার মন্তব্যটি উত্তরের জন্য আমার প্রশংসা প্রকাশ করার জন্য একটি অনুমিত মজার উপায় ছিল।
cbrandolino

17
এই পৃথিবীতে কি মিলছে?
টম ও'কনোর

4
আমি জানি না ... আমি মনে করি এটি পুরোপুরি পুরোপুরি যোগ হয়েছে। আপনি যদি রেজেক্সকে জানেন, এবং অন্যান্য পদ্ধতিগুলি জানেন না তবে আপনি কেন খোঁজ করবেন? আপনি ইতিমধ্যে একটি সরঞ্জাম পেয়েছেন যা সঠিকভাবে করা গেলে, কাজটি পরিচালনা করবে। যতক্ষণ না তারা সরল পদ্ধতিতে হোঁচট খায় বা এ সম্পর্কে বলা না যায়, রিজেক্সটি ক্যাচ-অল পদ্ধতি হবে, এমনকি তার চেয়ে জটিল হওয়া দরকার।
এওও

4
@ টম ও'কনোর আমার মনে হয় একটি আরএফসি 2822 ইমেল ঠিকানার সাথে মিলে যাওয়ার জন্য এটি রেগেক্সের খুব কাছাকাছি ছিল, তবে আমাকে বেশ কয়েকটি চরিত্র বের করতে হয়েছিল কারণ তারা মার্কডাউন দিয়ে সর্বনাশ করছিল।
গ্লেনাট্রন

23

আমি মনে করি এটি কারণ:

  1. এগুলি সমতুল্য কোডের সাথে তুলনায় চমত্কারভাবে সংক্ষিপ্ত হয় (যখন সঠিকভাবে ব্যবহৃত হয়) এবং
  2. এগুলি ব্যাপকভাবে প্রোগ্রামিং ভাষায় সমর্থিত, তাই বেশিরভাগ বিকাশকারী তাদের সাথে পরিচিত।

3
# 2 অর্থবোধ করে।
cbrandolino

23

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

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

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


2
আমি এটি যথেষ্ট upvote করতে পারবেন না।
ক্যাফগিকে

8
আমি কৌতূহলী: আপনি যেমন লেখেন তেমন রিগ এক্সপক্সও তেমন সাবলীলভাবে পড়েন ?
পিটারচেন

7
আমি আশা করি আপনি নিয়মিত রেইগেক্স প্রশিক্ষণ সেশন এবং / অথবা আপনার কোডের বাইরে নরকের ডকুমেন্ট করছেন; অন্যথায় আপনি আপনার সহকর্মীদের জন্য একটি স্বপ্নের দুঃস্বপ্ন তৈরি করছেন। আপনি যে "মার্জিত রেজেক্স" কী করছেন তা বোঝার চেষ্টা করে লোকেরা রেজেক্সকে একশ বার হারিয়ে ফেলতে পারে তা লিখে আপনি যে সময় সাশ্রয় করেছেন তা হারিয়ে যেতে পারে।
জেফ ন্যাচট

3
অতি মহৎ. আপনি এই মন্তব্যগুলিতে এই মুহুর্তে প্রেমময় এবং ঘৃণ্য রেগেক্সগুলির মধ্যে লড়াইয়ের কথা শুনতে পাচ্ছেন।
ড্যান রে

1
@ বেন লি: আমি অনুমান করি - ওওহ, আমি বুনোতে কোনও মন্তব্য করা রেজিসের মুখোমুখি হইনি। রেগেক্সগুলির কিছু সমস্যা শীতলতার মনোভাবের ভিত্তিতে হতে পারে।
পিটারচেন

16

অপরদিকে. মানুষ parrotting হয় Regex মন্দ হয় মেমে উপায় খুব প্রায়ই আইএমও। এটি স্পষ্টতই যে প্রিগ_ম্যাচটি অতিরিক্ত ব্যবহার করা হয় phpতবে এটি প্রায়শই বোধগম্য হয় না (পিএইচপি তে)।

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

সাম্প্রতিক উদাহরণ হিসাবে আমাকে উপলব্ধি করিয়েছে, যদি স্ট্রিংটি সর্বনিম্ন হয় তবে তা পরীক্ষা করে:

 if ($string == strtolower($string))

এর চেয়ে বেশি পাঠযোগ্য:

 if (!preg_match("/[A-Z]/", $string))

এবং আপনি ধরে নিবেন প্রথমটি অবশ্যই দ্রুত হওয়া উচিত, যেহেতু এটি অল-পিএইচপি। কিন্তু বাস্তবে রেজেক্স কেবল একবার স্ট্রিংয়ের উপরে নজর রাখে এবং বড় হাতের অক্ষর খুঁজে পাওয়ার সাথে সাথে অবহেলিত অবস্থাকে বাতিল করতে পারে। স্ট্রোল্টওয়ার () পদ্ধতির তবে দু'বার স্ট্রিংয়ের উপর নজর রাখা হয়েছে। প্রথম স্ট্রোল্টওয়ার () প্রতিটি অক্ষরের উপর পুনরাবৃত্তি করে, তার সাথে তুলনা করে এবং বড়হাতের মাধ্যমে একটি স্ট্রিং সদৃশ তৈরি করে। তারপরে ==মূলটির সাথে পুনরাবৃত্তি হয় এবং আবার অনুলিপিটি আরও একবার তুলনা করে।

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

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


1
আমি আপনার উদাহরণের সাথে একমত; তবুও, এই বিশেষ ক্ষেত্রে আমি যেকোন উপায়ে tsttolower () prefer পছন্দ করবো: অ-সমালোচনামূলক কোডে, এমনকি এত বড় (তুলনামূলকভাবে অন্য প্রয়োগের তুলনায়) এক্সিকিউশন সময় অপ্টিমাইজেশন তাত্পর্যপূর্ণ - যদি না আপনি নিম্ন-কেসকে মূল্যায়ন করতে চান - একটি বিশাল টেক্সট ফাইলের নেস, তবে আমি কোনও ক্ষেত্রে কল্পনা করতে পারি না যে এটি কার্যকর হবে।
cbrandolino

1
@cbrandolino: সেখানে কোন আলোচনা নেই। এই স্টাফগুলি কেবলমাত্র নেস্টেড লুপগুলির জন্য প্রাসঙ্গিক এবং মূল্যায়ন করা উচিত, যেখানে এটি একটি বাস্তব পার্থক্য করতে পারে
মারিও

4
+1 প্রকৃতপক্ষে লোকেদের সর্বদা তাদের ধর্ষণ করে, তারা সমর্থিতের চেয়ে অনেক বেশি।
Orbling

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

1
যে সমস্ত ব্যক্তি তার সমস্ত রেজেক্সস /xমোডে লিখছেন না জ্ঞানীয় ছাঁটাইয়ের কনুইয়ের জন্য সাদা স্থানের অনুমতি দেওয়ার জন্য এবং কেন জিনিসগুলি করা হচ্ছে তা ব্যাখ্যা করার জন্য মন্তব্যে অবশ্যই তাঁর কান বাক্স করা উচিত। তবে যুক্তিসঙ্গত জটিলতার সত্যিকারের রেগেক্সগুলির জন্য, আপনাকে ব্যাকরণগত রেজেক্সের মাধ্যমে টপ-ডাউন নকশা প্রয়োগ করার বিষয়টি বিবেচনা করা উচিত । একবার আপনি আলো দেখলে আপনি আর ফিরে যাবেন না /@#$^^@#$^&&*)@#/
tchrist

8

নিয়মিত প্রকাশগুলি খুব আকর্ষণীয় কারণ তারা নিয়মিত ভাষার বিশ্লেষণের জন্য সেরা হাতিয়ার।

তাদের নিম্নলিখিত সুবিধা রয়েছে:

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

এটি তাদের উপযুক্ত হয়ে ওঠা পরিস্থিতিতে আকর্ষণীয় করে তোলে, তবে লোকেরা সেগুলিকে এমন প্রসঙ্গে ব্যবহার করতে পারে যেখানে তারা সেরা সরঞ্জাম নয়, কারণ তারা:

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

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

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

সবাই কেন সম্পূর্ণ বিস্ফোরিত গাছকে সম্পূর্ণরূপে বিভক্ত ওয়েব পেজ সম্পূর্ণরূপে পার্স করার সাথে এইচটিএমএল এর সামান্য বিটগুলি বের করে বিভ্রান্ত করছে? এটা সত্যিই বোকা। বিশ্বাস করুন, আমি যখন HTML পৃষ্ঠাগুলি সম্পাদনা করি তখন viআপনি নিজের জীবনকে :%s/foo/bar/gcএটিতে ব্যবহার করেন। এটি যদি সম্পাদকের পক্ষে যথেষ্ট ভাল হয় তবে এটি কোনও স্ক্রিপ্টের পক্ষে যথেষ্ট ভাল।
tchrist

6

হুম, আমি কেবল অনুমান করতে পারি। সম্ভবত কিছু লোকের অভিজ্ঞতা আছে যে তাদের কোডের 30 টি লাইন 20-অক্ষর-দীর্ঘ রেজেেক্স দ্বারা প্রতিস্থাপিত হয়েছিল, তাই রেজিক্সগুলি ব্যবহার করার পরিবর্তে অন্য কিছু ব্যবহার করা তাদের পক্ষে ভুল মনে হয়।


4

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


6
আমাদের বিবর্তনীয় ইতিহাসের দিক থেকে যা যুক্তি দেখায়। আমরা ব্যাকরণ সংজ্ঞায়িত করার বা সিলেজিজম আবিষ্কার করার অনেক আগে প্যাটার্নগুলির সাথে মেলে।
glenatron

1
আমি দ্বিমত পোষণ করছি, প্রোগ্রামিং যুক্তি এবং প্যাটার্ন ম্যাচিং, দুটি ক্ষেত্র জড়িত। রেজেক্সপস প্যাটার্ন মেলানোর ক্ষেত্রে খুব ভাল এবং এই জাতীয় কাজের জন্য ব্যবহার করা উচিত। "আমি তাদের পছন্দ করি না" এমনও বলা, কোনও নির্দিষ্ট কাজের জন্য একটি ভাল সরঞ্জাম ফেলে দেওয়া।
অরব্লিং

@ অরব্লিং: প্রশ্ন তারা ভাল বা খারাপ তা নয়, তবে কিছু লোক কেন তাদের অতিরিক্ত ব্যবহার করে এবং অন্যরা তা করে না।
লেনার্ট রেগেব্রো

প্রশ্নটি হতে পারে তবে আপনার উত্তর থেকে বোঝা যায় যে দুজনের চেয়ে বরং এক বা অন্য ধরণের মনের খেলা চলছে।
অরব্লিং

আমি মনে করি না "পরামর্শ" সঠিক শব্দ।
লেনার্ট রেজেব্রো

3

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

গতকালই, আমি একটি চকচকে নতুন জাভাস্ক্রিপ্ট ফ্রেমওয়ার্কের জন্য এপিআইয়ের সন্ধান করছিলাম যা এইচটিএমএল 5 গেম বিকাশ সমর্থন করে। আপনার গেমের যে প্রধান সাবসিস্টেমগুলির প্রয়োজন হবে তা বর্ণনা করার জন্য এটিতে একটি ঘোষণামূলক প্রক্রিয়া রয়েছে। কীভাবে কেউ এই বৈশিষ্ট্যগুলি নির্দিষ্ট করে? তাদেরকে JSON? সাবলীল বিন্দু চিহ্নিতকরণ? একটি অ্যারের? নাপ - একটি কমা- এবং সাদা স্থান-বিচ্ছিন্ন বৈশিষ্ট্যের নামের তালিকাযুক্ত একটি স্ট্রিং। আমি ভাবছি কীভাবে এই তালিকাটি পার্স করে ...?


2

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

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

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


2

হুম, বর্তমান উত্তর প্রযুক্তিগত দিক খুব বেশি কেন্দ্র, এবং পাঠযোগ্যতা অনুকূল / কনস (যা হল একটি গুরুত্বপূর্ণ পয়েন্ট)। সুতরাং আমাকে পিএইচপি পরিবেশ / সম্প্রদায়ের উপর এটি আরও কিছুটা স্থানান্তরিত করার চেষ্টা করুন:

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

কিন্তু ঠিক পাশের নোট হিসাবে। আমি বিশ্বাস করি এটি যেহেতু বেশিরভাগ ক্ষেত্রেই উপলব্ধিযোগ্য এবং প্রযুক্তিগত কারণ যা সাধারণভাবে অতিরিক্ত ব্যবহার এবং / অথবা নিয়মিত প্রকাশকে বাদ দেয়। তবুও পিএইচপি এবং এর ব্যবহারকারীর কয়েকটি বৈশিষ্ট্য রয়েছে যা এটিকে সংশ্লেষ করে এবং আমরা কেন এটি সম্পর্কে আরও প্রশ্ন দেখি [উদ্ধৃতি আবশ্যক!] এবং সেগুলি সেখানে "দু: খিত আকর্ষণীয়"।


1

আমি নিয়মিত মত প্রকাশ করতে চাই আমি তাদের 20 টি লাইনের কোডের পরিবর্তে পড়তে / বুঝতে সহজ মনে করি যেগুলি সেগুলি প্রতিস্থাপন করতে হবে। সংক্ষিপ্ত নিয়মিত এক্সপ্রেশনগুলি দ্রুত পড়া এবং বোঝা যায় এবং এগুলি বজায় রাখা তুলনামূলকভাবে সহজ (যদি অভিব্যক্তি পরিবর্তিত হয় তবে পরিবর্তনটি করার জন্য কোডের 20 টি লাইনের সন্ধানের পরিবর্তে পরিবর্তন করার জন্য আপনার একটি লাইন রয়েছে)। এমন সময় আছে যেখানে তাদের অপব্যবহার করা হয় তবে অন্যান্য অনেক জিনিস।

আপনি সম্ভবত তাদের এত অপব্যবহারের কারণ হচ্ছেন কারণ আপনার স্ট্যাকওভারফ্লোয়ের পিএইচপি বিভাগটি ব্রাউজ করা হওয়ায় আমি নিশ্চিত যে আপনি অবগত আছেন যে সেখানে প্রচুর অপরিহার্য পিএইচপি প্রোগ্রামার রয়েছে।


1

নিয়মিত প্রকাশগুলি এত মারাত্মক আকর্ষণীয় কেন?

তারা না. তারা আসলে জাহান্নামের মতো কুৎসিত। এবং বোধগম্য। এগুলি এমন একটি ঘৃণা যা যত তাড়াতাড়ি সম্ভব হত্যা করা উচিত।

এখন, এটি বলা হচ্ছে, আমি কিছুটা পার্ল অ্যাপ ডিবাগিংয়ে ফিরে যাচ্ছি। এটি সাহায্য করতে পারে না; দুর্ভাগ্যক্রমে, তারা এখনও মাঝে মাঝে কাজের সেরা হাতিয়ার।


4
আমি এ কথা বলার শখ করছি যে নিয়মিত প্রকাশগুলি "নিয়মিত" বা "এক্সপ্রেরিভ" হয় না
অ্যান্ড্রু বারবার

2
এগুলি কুরুচিপূর্ণ এবং বোধগম্য নয় যদি আপনি তাদের বুঝতে না পারেন। আপনি একবার রেজেক্সের জেন অর্জন করার পরে, তারা সত্যিই বেশ মার্জিত হয়।
ড্যান রে

1
-1 সিদ্ধান্ত নেওয়ার জন্য যে সমস্ত প্রোগ্রামার অস্পষ্ট হতে পছন্দ করে এবং তারপরে অন্য কোনও সম্ভাব্য ব্যাখ্যা বিবেচনা না করে। ... আপনারা কেন কুরুচিপূর্ণ বা বোধগম্য বলে মনে করছেন তা বললে সহায়তা করবে।
ম্যাকনিল

1
@ ম্যাকনাইল - দয়া করে, (যদিও হ্যাঁ, আমার ধারণাগুলি সেই লাইনটির সাথে রয়েছে), আপনি যদি না বলে থাকেন তবে আমি যেটা বলেছি / সিদ্ধান্ত নিয়েছি তা না বলে (আপনার মন্তব্যের প্রথম অংশ) don't আপনার প্রশ্ন যতদূর, আপনি এগুলি সুন্দর দেখতে পেয়েছেন ?! ... আমি না। এবং যেহেতু এটি একটি বিষয়গত সাইট, এবং এটি একটি বিষয়গত মতামত, তাই আমাকে এটির বিস্তারিত জানাতে হবে না বা করতে হবে না। বা আমি চেষ্টা করব না, এই বিষয়ে।
দাড়কাক

1
@ রুক - আমার মনে হয় বেশিরভাগ লোকেরা একটি জটিল নিয়মিত অভিব্যক্তি দেখেন, নিয়মিত সমস্ত অভিব্যক্তি কুরুচিপূর্ণ সিদ্ধান্ত নেন এবং তারপরে চিন্তাভাবনা বন্ধ করেন। আসল বিষয়টি হ'ল আপনি যদি তাদের সম্পর্কে আপনার কুসংস্কার নির্ধারণ করতে পারেন তবে সেগুলি একটি খুব মার্জিত এবং অভিব্যক্তিপূর্ণ সরঞ্জাম। বিটিডাব্লু, আপনার নিজস্ব যুক্তি অনুসারে, অনেক প্রোগ্রামার বীজগণিত করতে পারে না, তাই বীজগণিত সম্ভবত সহজাতভাবে মন্দ এবং এটি নির্মূল করা উচিত কারণ এটি স্পষ্টভাবে খুব সহজে বোধগম্য নয়।
ড্যান রে

0

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


0

নিয়মিত প্রকাশগুলি খুব আকর্ষণীয় কারণ তারা শক্তি চালায়। আপনি খুব জটিল চরিত্রের মধ্যে একটি খুব জটিল টুকরো কাজ করতে পারেন।

সমস্যা হলো মান রেগুলার এক্সপ্রেশন কনস্ট্রাক্ট হয় না টুরিং-সম্পূর্ণ যা মানে প্রোগ্রাম আপনি কেবল একটি রেগুলার এক্সপ্রেশনের সাথে বাস্তবায়ন করতে পারবে না যে, এবং মানুষ না জানি যখন তারা রেগুলার এক্সপ্রেশনের আপাত শক্তিতে দুজন কিশোর কে প্রতারণা করছেন।

এটি - আমার ধারণা - "এখন তাদের দুটি সমস্যা আছে" এর jwz-quot এর কারণ ।

আমি অনুমান করব যে পার্লের নিয়মিত প্রকাশগুলি টিউরিং-সম্পূর্ণ, তবে দৃশ্যত এটি এখনও সিদ্ধান্তমূলকভাবে প্রমাণিত বা অস্বীকৃত হয়নি।


0

কারণ এটি একটি সসীম রাষ্ট্র মেশিনকে প্রোগ্রাম করার একটি কার্যকর উপায়, যা এটি প্রয়োগ করার সময় একটি শক্তিশালী সরঞ্জাম। এটি মূলত এফএসএম প্রোগ্রামিংয়ের জন্য এটি নিজস্ব ভাষা, যা আপনি যদি ভাষাটি জানেন তবে তা যদি সহায়ক না হয় তবে বিরক্তিকর।


0

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

পার্ল, আর্ক, লিনাক্স এবং এমন কোনও জিনিস যা সম্পর্কে কোনও চকচকে বোতাম বা সুন্দর রঙিন সিনট্যাক্স নেই সে সম্পর্কে একই কথা বলা যেতে পারে। সুতরাং, এটি "তুচ্ছ কাজগুলিতে" যুক্ত জটিলতার মতো, কিছু লুপ, বিভাজন, একটি সুইচ, কিছু যাদু এবং এটিই, কাজ করে এমন কিছু হতে পারে throw তবে ভাল, আপনি যদি রাস্তার অপর পাশে থাকেন তবে রেজেক্সগুলি হ'ল সুন্দর কুকি কাটার যা কোনও সংকটযুক্ত লুপগুলি বা ডিবাগ করার জন্য আরও স্টাফ ছাড়াই সিগন্যাল শোরগারের মতো দেখায়। তারা যে নমনীয়তা দেয় সে জন্য আমি তাদেরও পছন্দ করি। প্যাটার্নের সাথে মেলে যখন পরিবর্তন হয়, আপনি কেবলমাত্র অ্যালগরিদম বা সরঞ্জাম / যাই হোক না কেন, রেজিজ পরিবর্তন করেন এবং এটি দুর্দান্ত এবং আবার কাজ করে। এবং যেহেতু এগুলি একটি যাদুকরী স্ট্রিং, আপনি যদি চান তবে এটি উত্সকোডের বাইরে রাখতে পারেন। এবং অন্য একটি জিনিস যা আমাকে পার্ল সম্পর্কে ভাবতে বাধ্য করে, আপনি যদি 20+ অক্ষর দীর্ঘ লম্বা একটি রেজেক্স লিখেন তবে মনে হয় আপনি অনেক অর্জন করেছেন, কমপক্ষে আমার জন্য, এটি ঠিক এত পরিষ্কার এবং কমপ্যাক্ট। আমিও একটি অলস প্রোগ্রামার, আমি ভাল পরিচয় এবং মন্তব্য সহ প্রচুর কোড লিখতে এবং মিশ্রণে কিছু বাগ যুক্ত করতে পছন্দ করি না।

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