আপনি নিয়মিত এক্সপ্রেশন কীভাবে শিখবেন? [বন্ধ]


80

আমি কোথায় শিখতে হবে তা জিজ্ঞাসা করছি না । আমি অনলাইনে প্রচুর ভাল সংস্থান এবং বই ইত্যাদি পেয়েছি I've

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

আমি মিশরীয় পিরামিডগুলিতে হায়ারোগ্লিফগুলি বের করার চেষ্টা করার মতো অনুভব করছি।


2
বিষয় অনুসারে বাছাই করুন - নিয়মিত- এক্সপ্রেসন.ইনফো । নীচে এটি এবং @ জালেনের পরামর্শ ব্যবহার করুন। করতে করতে শেখা!
ফ্রেইহাইট

6
gskinner.com/RegExr আমি খুঁজে পেয়েছি এমন রেগেক্সগুলি বিকাশের সেরা সরঞ্জাম।
কলম রজার্স

এক সময় একটু সাধারণ স্টাফ ("এএএ", "এএ।", "ক * বি", ইত্যাদি) দিয়ে শুরু করুন এবং বাস্তবায়ন-নির্দিষ্ট উপাদানগুলিতে (যেমন পিসিআরই) আপনার পথে কাজ করুন। তারপরে একটি প্যাটার্ন নিয়ে আসুন এবং এটি পছন্দ করে এমন একটি রেজেক্স তৈরি করার চেষ্টা করুন।
টাইলার

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

উত্তর:


68

আমি মনে করি যে অটোমাতা তত্ত্বের জ্ঞান বোঝার জন্য গুরুত্বপূর্ণ।

একবার আপনি যখন বুঝতে পারবেন যে অটোম্যাটন কী, এবং কীভাবে নিয়মিত ভাষা সংজ্ঞায়িত হয়, নিয়মিত এক্সপ্রেশনগুলি বোঝা আরও সহজ হবে।

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

সম্পাদন করা

নীচে কিছু মন্তব্য গুরুত্বপূর্ণ পয়েন্ট উত্থাপিত:

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

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


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

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

কেবল আমার 2 সেন্ট: এমএসডিএন এর চ্যানেল 9-তে সি ++ এসটিএল রেজেক্স লাইব্রেরি সম্পর্কে সাম্প্রতিক একটি ভিডিও সিরিজে, উপস্থাপক, যা এসটিএল-র একজন রক্ষণাবেক্ষণকারীও বলেছে যে তারা এটিকে একটি অটোমেটা হিসাবে প্রয়োগ করে। সুতরাং এই তত্ত্বটি জানার ফলে ওপিকে সত্যিকার অর্থে রেগেক্সের কাজগুলি সম্পর্কে কিছুটা অন্তর্দৃষ্টি দেওয়া উচিত।
korbes

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

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

36

অনুশীলন করে।

আমি ওয়েব স্ক্র্যাপিং দিয়ে মজা করে শিখেছি। আমি নিশ্চিত যে আমি একা মজা করার জন্য এটি করছিলাম না।

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

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


15
নিয়মিত প্রকাশের সাথে এইচটিএমএল পার্স করা সাধারণত একটি খারাপ ধারণা।
Maxpm

10
অবশ্যই এটি একটি খারাপ ধারণা। ডিওএম / স্যাক্স পার্সার বা অন্যান্য উত্সর্গীকৃত এক্সএমএল পাঠকদের ব্যবহার হ'ল "সাধারণত" ব্যবহার করা উচিত। তবে এখানে বিষয়টি নিয়মিত প্রকাশগুলি শেখার বিষয়ে and এবং আমি কীভাবে নিয়মিত ভাব প্রকাশ সম্পর্কে শিখলাম তা আমি "মজাদার" উপায় বলে মনে করি shared
জালান

3
এইচটিএমএল ওয়েব পৃষ্ঠাগুলির জন্য এক্সএমএল পার্সার ব্যবহার করা নিয়মিত প্রকাশের সাথে তাদের স্ক্র্যাপ করার চেয়েও খারাপ ধারণা।
স্কোলিমা

8
আহ্ ভাল, আমি সে সম্পর্কে আমি যা ভেবেছিলাম সে সম্পর্কে আরও সুনির্দিষ্ট হতে চেয়েছিলাম তবে আমি অলস ছিলাম এবং আমি কেবল মন্তব্যেই প্রতিক্রিয়া জানালাম ... আমি মনে করি আমরা সকলেই একমত হতে পারি যে ১. পুরো ডকুমেন্টটি বিশ্লেষণের জন্য নিয়মিত অভিব্যক্তি ব্যবহার করা একটি খারাপ ধারণা ২. এক্সটিএমএল পার্সার ব্যবহার করে এইচটিএমএল পার্স করা খারাপ ধারণা 3.. এক্সএইচটিএমএল পার্স করতে এক্সএমএল পার্সার ব্যবহার করা ঠিক 4.. ওয়ান-লাইনার পুনরুদ্ধার করার জন্য নিয়মিত এক্সপ্রেশন ব্যবহার করা বা এইচটিএমএল থেকে কিছু নির্দিষ্ট তথ্য সঠিকভাবে সঠিক। অথবা আমি কেবল এটি
সংক্ষেপ

23

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

আপনি এই অভিশাপ regexp বুঝতে চান? এই বইটি পড়ুন।


2
এটিই সুনিশ্চিত উত্তর হওয়া উচিত।
পাতলা

1
+100,000 প্রশ্নের সেরা বিষয় সম্পর্কে সুবিধামত প্রযুক্তিগত বইগুলির মধ্যে একটি।
এফে

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

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

19

এর শুরু কোথায়, শেষ কোথায়? কখন রেজএক্সপ্যাক প্রসেসর পাঠ্যে অগ্রসর হয়, কখন এটি তার অবস্থান ধরে এবং অন্য ম্যাচ চেষ্টা করে? প্রভৃতি

আমি আপনার লক্ষ্যগুলি পরিষ্কার করে এবং তারপরে আপনার শেখার স্টাইলটি বের করে শুরু করব

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

প্রাথমিক অ্যাপ্লিকেশনগুলির জন্য, কোনও সরঞ্জাম কার্যকরভাবে কার্যকরভাবে ব্যবহার করতে কীভাবে কাজ করে তা বোঝার দরকার নেই। কাঠের গর্ত স্থাপনের জন্য কীভাবে একটি ড্রিল মোটর কাজ করে তা আপনার জানতে হবে না; কীভাবে ড্রিলটি ব্যবহার করবেন, কীভাবে কোনও ড্রিল তৈরি করবেন তা আপনার বুঝতে হবে ।

সুতরাং আপনার লক্ষ্য কি? আপনি কীভাবে নিয়মিত এক্সপ্রেশন ইঞ্জিন তৈরি করবেন তা শিখতে চান ? বা আপনি কীভাবে ব্যবসায়ের সমস্যাগুলি সমাধান করার জন্য নিয়মিত অভিব্যক্তি কার্যকরভাবে ব্যবহার করবেন তা শিখতে চান ? এই বিভিন্ন লক্ষ্য অর্জনে বিভিন্ন শিক্ষার কৌশল সম্ভবত প্রয়োজন।

নিয়মিত এক্সপ্রেশন ইঞ্জিন কীভাবে কাজ করে সে সম্পর্কে আপনার নির্দিষ্ট প্রশ্নের সমাধান করার জন্য: এটি নির্ভর করে। নিয়মিত প্রকাশের জন্য "ক্লাসিক" তাত্ত্বিক পদ্ধতির হ'ল নিয়মিত প্রকাশকে একটি ননডেটারিস্টিনিস্টিক সসীম অটোমেটনের ব্লুপ্রিন্ট হিসাবে ব্যবহার করা, তারপরে সমপরিমাণ ডিস্ট্রিমেন্টিক সসীম অটোমেটন তৈরি করা এবং তারপরে ইনপুটটির বিপরীতে সেই অটোমেটন কার্যকর করা।

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

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

এর পরিবর্তে বাস্তব নিয়মিত এক্সপ্রেশন ইঞ্জিনগুলি সাধারণত ব্যাকট্র্যাকিং কৌশল ব্যবহার করে। এক দশক আগে আমরা জেএসক্রিপ্ট ইঞ্জিনের জন্য যে নিয়মিত এক্সপ্রেশন ইঞ্জিনটি তৈরি করেছিলাম তা এখন নিয়মিত প্রকাশকে বাইটকোড ভাষায় সংকলন করে যার মধ্যে ক্রমগুলি সনাক্তকরণ এবং পূর্ববর্তী রাজ্যে ব্যাকট্র্যাকিংয়ের জন্য আদিম রয়েছে। তারপরে আমরা সেই বাইটকোড ভাষার জন্য একটি দোভাষী তৈরি করি।

নিয়মিত এক্সপ্রেশন কীভাবে ব্যবহার করতে হয় তার সম্পর্কে যথেষ্ট দৃ understanding় বোঝার আগে আমি একটি রেজিএক্সএক্স ইঞ্জিন কীভাবে কাজ করে তা বোঝার চেষ্টা করব না । আপনি বিভিন্ন বিভিন্ন ইঞ্জিন অনুকূলিতকরণ কৌশল খনন শুরু করার আগে তাতে মনোনিবেশ করুন।


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

3
@ ফেলিক্স: আমি মনে করি আমরা আসলে তাতে একমত হই আমি বলেছিলাম যে প্রাথমিক অ্যাপ্লিকেশনগুলির জন্য সাধারণত কোনও সরঞ্জাম ব্যবহার করার জন্য কীভাবে কাজ করে তা বোঝার দরকার নেই। এই ন্যাসেল শব্দগুলি ইচ্ছাকৃত ছিল। জন্য মজুর বা উদ্ধত একটি টুল এটা খুব তার internals সম্পর্কে অন্তত কিছু বুঝতে যাতে আপনি সঠিকভাবে যেখানে টুল খারাপ পারফরম্যান্স থাকবে পূর্বাভাস দিতে পারি সহায়ক ব্যবহার, বলে।
এরিক লিপার্ট

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

আপনি বলে থাকেন যে নিয়মিত প্রকাশগুলি নিয়মিত হয় না - তবে আমি ভেবেছিলাম যে নামটি নিয়মিত বিশ্বের নিয়মিত প্রকাশের সাথে মিলিত হয় - উদাহরণস্বরূপ নিয়মিত প্রকাশ "[0-9]{3}"যা কোনও তিন অঙ্কের সংখ্যার সাথে মেলে এবং তিন অঙ্কের 480 একটি নিয়মিত উদাহরণ এটি মেলে প্রকাশ।
কনফিগারকারী

1
@ কনফিগুয়েটর: একটি "নিয়মিত" ভাষা হচ্ছে এমন একটি ভাষা যা একটি সীমাবদ্ধ অটোমেটনের দ্বারা স্বীকৃত হতে পারে language প্রতিটি নিয়মিত ভাষা কেবলমাত্র ইউনিয়ন, বিকল্প, ক্যাটেনেশন এবং ক্লিন স্টার সমন্বিত একটি "নিয়মিত প্রকাশ" দ্বারা চিহ্নিত করা যায়। তবে বেশিরভাগ "নিয়মিত প্রকাশ" ইঞ্জিনগুলি আজকাল নিয়মিত ভাষার চেয়ে জটিল ভাষাগুলি স্বীকৃতি দেয়; উদাহরণস্বরূপ, "সঠিকভাবে মিলে যাওয়া প্রথম বন্ধনীর সাথে বাক্যগুলির" ভাষা নিয়মিত নয়, তবে আপনি কিছু রেজিএক্সএক্স ইঞ্জিনে এটি "নিয়মিত অভিব্যক্তি" দিয়ে মেলাতে পারেন।
এরিক লিপার্ট

6

আমি কীভাবে তাদের মোকাবেলা করব?

যে কোনও নতুন জিনিসের মতো:

10 Study
20 Practice
30 goto 10

অধ্যয়ন

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

এটি সব স্ট্রিং ম্যাচিং

নিয়মিত এক্সপ্রেশন হ'ল পাঠ্যের সাথে মিলে যাওয়া নিদর্শনগুলির একটি মাধ্যম। এটি একটি ঘোষণামূলক ভাষা যা নিজেই অন্যান্য অসংখ্য প্রোগ্রামিং ভাষার অন্তর্ভুক্ত।

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

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

কেউ কেউ (এবং হওয়া উচিত) এর পূর্ববর্তী বাক্যে কিছু বলে আমার পূর্ববর্তী বাক্যটি সম্পর্কে অভিযোগ করবে:

RegEx কোনও প্রোগ্রামকে সহজ করে না।

এটা সত্যি

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

আমি জাভাস্ক্রিপ্টের রেজিএক্স ইঞ্জিনকে বাধ্যতামূলকভাবে বেছে নিয়েছি এমন কয়েকটি উদাহরণ সংযুক্ত করতে দেয় কারণ আমি এটি সহজেই ব্রাউজারে লাইভ পরীক্ষা করতে পারি এবং কারণ রেজিএক্স আক্ষরিক ব্যবহার করার সময় আমাকে কোনও স্ট্রিং পলায়ন করতে হবে না।

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

if ( 'foo' == 'bar' ) doSomething();

উদাহরণস্বরূপ sucks কারণ এটি কখনও হবে না কিছু

if ( foo == 'bar' ) doSomething();

অনেক ভাল; এখন, কিছু করা হবে কি হবে না আমরা আসলে সময়ের আগে জানি না। আমরা এখন ব্যবহারকারীর ইনপুট গ্রহণ করা শুরু করতে পারি:

if ( prompt( 'Say "bar" to do something.' ) == 'bar' ) doSomething();

আশ্চর্যজনক, এখন ব্যবহারকারীরা ইনপুট barকরতে পারে এবং কিছু ঘটবে, যতক্ষণ না আপনি ব্যবহারকারীরা যে "bar"কাজ করছেন না বা "বিএআর" কাজ করছে না, বা তারা BRA100 বার টাইপ করেছে এবং এর আগে কখনও ঘটেনি এমন কোনও বাগ রিপোর্ট পাবেন ।

ভুল বানান এবং অতিরিক্ত অক্ষর উপেক্ষা করে 'bar' != 'BAR'প্রোগ্রামারদের যেখানে অক্ষরগুলি ভুল ক্ষেত্রে তা পরীক্ষা করার জন্য একটি উপায় চিন্তা করা প্রয়োজন think

সহজ সমাধান, ব্যবহার toLowerCase। এটি আশ্চর্যজনকভাবে কাজ করে, তবে আমাদের ব্যবহারকারীরা কী মিলছেন যখন আপনি আমেরিকান ইংলিশে ব্রিটিশ ইংরেজি ব্যবহার করছেন something == 'color'? এখন আপনাকে মিলতে হবে something == 'color' || somthing == 'colour'

দীর্ঘ গল্পের সংক্ষিপ্ত, সাধারণ নিদর্শনগুলি খুব দ্রুত পুনরুক্তিযোগ্য কোডগুলিতে রূপান্তরিত হয়।

রঙ উদাহরণটি সহজেই এর সাথে মেলে:

/colou?r/.test( something )

নিয়মিত এক্সপ্রেশনগুলির মূল বিষয়গুলি সম্পর্কে একটি গভীর বোঝা আপনি চক্রটিকে পুনর্নির্মাণে ব্যয় করা সময়ের পরিমাণ উল্লেখযোগ্যভাবে হ্রাস করতে পারে।

কোথায় পড়াশোনা করতে হবে

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

এটি পড়ুন।
এটার সবগুলো.
তারপরে আবার পড়ুন।

এটি শিখতে সময় লাগে, একে বিনিয়োগ হিসাবে ভাবেন: RegEx শেখার জন্য এক ঘন্টা এখন পরের বার কিছু স্ট্রিং প্যাটার্ন ম্যাচিং করার দরকার পরে একটি ঘন্টা বাঁচায় এবং তারপরে পরের সময় আরও একটি ঘন্টা।

অনুশীলন করা

RegEx সম্পর্কে সমস্ত পড়ার পরে, আপনি সম্ভবত এটি বেশিরভাগই বুঝতে পারবেন না। এর কারণ আপনি আসলে এটি দিয়ে কিছুই করছেন না ।

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

জেএসের রেজিএক্স ব্যবহারের কয়েকটি ভিন্ন এবং সহজ উপায় রয়েছে:

string.match( regex )
regex.exec( string )
regex.test( string )

সাধারণ কিছু দিয়ে শুরু করা:

javascript:'color'.match(/colou?r/);

আপনার পা দরজা পেতে একটি সহজ উপায়। এটি খেলুন, এটি দেখুন কি মিলছে এবং কোনটি নয় তা ভেঙে দিন।

আপনি যখন অনুশীলনে আটকে যান, চালিয়ে যান 30। আপনাকে আরও শিখতে পড়তে হবে তবে আপনি যা শিখেছেন তা বুঝতে অনুশীলন করা দরকার।


ব্রাউজারে জাভাস্ক্রিপ্টের সাথে জগাখিচির পরামর্শ দেওয়ার জন্য +1।
জন টোবলার

5

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


উল্লিখিত "রেজেক্স প্রসেসর" আসলে বিযুক্তি প্রয়োগ করে না এবং প্রদত্ত পদ্ধতির সাথে এগুলি যুক্ত করা খুব কঠিন। আমি বইটি পছন্দ করি তবে এটি হ'ল আমি হতাশ হয়েছি।
ফেলিক্স ডমব্যাক

4

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


1
+1, "রেজেক্স হিরো" খুব সুন্দর: regexhero.net/tester
অ্যাঞ্জেলো

রেগেক্সবাডি আমার অন্যতম প্রিয় সরঞ্জাম is গাছের দৃশ্যটি অবিশ্বাস্যরূপে সহায়ক, যেমন আপনি নিজের রেজেক্স তৈরি করেন তত্ক্ষণাত্ পরীক্ষা করতে সক্ষম হচ্ছেন। আমি এটি ব্যবহার না করে এটি শেখার চেষ্টা না করে অনেক বেশি রেইগেক্স শিখেছি।
চাও

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

3

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

আমার পরামর্শটি হ'ল আপনি যা অনুসন্ধান করছেন তার একটি উদাহরণ দিয়ে শুরু করে এড়িয়ে চলুন। সুতরাং অন্য কথায়, আপনি যদি প্রথম বন্ধনীতে কোনও সন্ধান করছেন, আপনি যে পাঠ্যে সন্ধান করছেন তাতে এই জাতীয় একটি স্ট্রিংয়ের উদাহরণ নিন: (this is an example of something you'd want to find)

অক্ষরগুলি পালানোর মাধ্যমে শুরু করুন যাতে আপনি আক্ষরিক চরিত্রটি অনুসন্ধান করেন: \(this is an example of something you'd want to find\)

এটি পরীক্ষা করুন, যাচাই করুন যে এটি আপনার উদাহরণটি সঠিকভাবে খুঁজে পেয়েছে। তারপরে আপনি যে উদাহরণটি পেয়েছেন তা নয়, এই জাতীয় কোনও পাঠ খুঁজে পেতে এক্সপ্রেশনটিকে সাধারণকরণ করুন। সুতরাং এটি তখন হয়ে উঠবে: \([^)]*\) (0 সহ কয়েকটি সংখ্যক ঘটনার জন্য ") এমন কোনও অক্ষর যার অর্থ") নয়।

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

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


3

আমি আপনাকে একটি সাধারণ প্রশ্নের সহজ উত্তর দেব। প্রথমে আপনাকে বুঝতে হবে যে নিয়মিত এক্সপ্রেশন (RegEx) কী - তারা কী করে, তারা কী ব্যবহার করে। তারপরে, শুরু করার জন্য দুর্দান্ত সরঞ্জাম।

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

  2. কীভাবে শেখা শুরু করবেন? আমি দেখেছি নিখুঁত সেরা সরঞ্জামটি এক্সপ্রেসো , তবে এটি কেবল উইন্ডোজের জন্য for এটির একটি বিস্তৃত জিইউআই রয়েছে যেখানে আপনি আপনার অভিব্যক্তিতে যোগ করতে চান এমন উপাদানগুলির মাধ্যমে ক্লিক করেন, তারপরে ফলাফল দেখতে বিভিন্ন পরীক্ষার বিরুদ্ধে এটি পরীক্ষা করার জন্য একটি পরীক্ষক। আমি ম্যাকের জন্য ভাল কিছু দেখিনি (তবে আমি ভিএমওয়্যারে উইন্ডোজ চালাচ্ছি, সুতরাং আসলে কোনও ম্যাক সংস্করণ লাগবে না), লিনাক্সের দিকে নজর দেওয়ার জন্য খুব বেশি সময় ব্যয় করেনি।


1
এক্সপ্রেসো সম্পর্কে পরামর্শ দেওয়ার জন্য ধন্যবাদ। আমি এটি চেষ্টা করে দেখেছি এবং এটি দুর্দান্ত!
টেক্সাসে জিম

3

একটি ভাল রেফারেন্সের পাশাপাশি, আপনি যেভাবে সত্যই শিখছেন তা হ'ল ভাল শেখার সরঞ্জামগুলি ব্যবহার করা। একটি ওপেন-সোর্স ভিম সম্পাদক ব্যবহার করছে , দুটি বিকল্প সেট সহ:

  1. : ইনসার্চ সেট করুন ... আপনি কমান্ড লাইনে একটি অনুসন্ধান প্যাটার্নটি টাইপ করার সাথে সাথে সম্পাদকটি ফ্লাইটের প্রথম টুকরোতে ঝাঁপ দেয় যা মেলে এবং কী মিলছে তা হাইলাইট করে। আপনি যদি এমন কোনও কিছু টাইপ করেন যা এটিকে আর কোনও কিছুতে মেলে না, ভিম আপনার কার্সারটিকে আপনি যেখানে শুরু করেছিলেন সেখানে ফিরে যান।
  2. : hlsearch সেট করুন ... এটি ভিমকে বর্তমানের অনুসন্ধানের সাথে মেলে এমন সমস্ত পাঠ্যের একটি হাইলাইট পটভূমি প্রদর্শন করতে বলেছে।

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


RegExCoach এখন শেয়ারওয়ার। জটিল পার্ল-স্টাইলের আরইগুলি বিকাশে আমি এটি খুব সহায়ক বলে মনে করেছি।
ফার্স্ট্রক

2

আপনি একটি প্রাথমিক স্ট্রিং তুলনা দিয়ে শুরু। খুব সহজ, তবে সেই শক্তিশালীও নয়।

এর পরে, এটি আপনার কাছে ঘটেছে, আপনার কেস ইনসেসিটিভ তুলনা প্রয়োজন, যাতে "গ্রীক" এবং "গ্রীক" সমান তুলনা করতে পারেন। এটি কিছুটা বেশি শক্তিশালী।

একদিন আপনি বানানের ক্ষুদ্র পার্থক্য লক্ষ্য করেছেন যে 2 টি শব্দকে সমান তুলনা করতে বাধা দেওয়া উচিত নয়: "" সংগঠিত "এবং" সংগঠিত "সমান তুলনা করা উচিত। আপনি বসে কিছু কোড লিখুন যা এটি করে এবং আপনি খুশি।

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

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

এবং তারপরে, এটি মোটামুটি সহজ এবং নিম্নলিখিত 3 টি মূলনীতিতে নেমে আসে:

আপনার কাছে বেসিক রিজেক্সস রয়েছে: অক্ষর যা নিজেরাই দাঁড়ায়, অক্ষর শ্রেণি, সহজ এবং বড় হাতের অক্ষরের জন্য character d বা \ p {Lu like এর মতো অক্ষর শ্রেণির জন্য খুব সহজে ব্যবহারযোগ্য সংক্ষেপণ নয়।

এবং তারপরে, এগুলিকে একত্রিত করার আপনার কিছু সম্ভাবনা রয়েছে: আর 1 এবং আর 2 যদি রিজেক্সপ হয়, তবে r1r2 আর 1 | আর 2 (আর 1) হয়।

সর্বশেষে, তবে কমপক্ষে পুনরাবৃত্তি সংশোধকগুলি নয়: আর? r * আর + আর {n, এম

এটি আপনার জানা দরকার। আপনার যখন প্রয়োজন হবে তখন অন্য যে কোনও কিছু আপনি দেখতে পাচ্ছেন।


2

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

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



1

আমার জন্য, আমি এটি তৈরির সাথে সাথে রিজএক্সপক্সের সাথে কী মিলছে তা দেখে আমার জীবনকে আরও সহজ করে তোলে এবং সেগুলি আরও ভালভাবে বুঝতে আমাকে সহায়তা করেছে।

এটি করার জন্য, আমি ইম্যাক্সে লক্ষ্যযুক্ত পাঠ্য সহ একটি ফাইল খুলব এবং তারপরে isearch-forward-regexpকমান্ডটি ব্যবহার করব । আপনি যখন রেজিপেক্সে প্রবেশ করবেন, ইমাকগুলি আপনাকে এটির সাথে কী মিলছে তা দেখায় (এটিই "দ্বীপটির" অংশ)।

কমান্ডটি চালানোর জন্য, ইমাসে, আপনি ব্যবহার করতে পারেন <ESC>xisearch-forward-regexp


1

আমি নমনীয় বিশ্লেষক এবং পার্সার তৈরি করতে ব্যবহৃত ফ্লেক্স এবং বাইসন শিখিয়ে নিয়মিত প্রকাশ পেয়েছি। আপনার নিয়মিত প্রকাশ ছাড়া পার্সার থাকতে পারে না এবং লেক্সএক্স এবং ইয়্যাক বইটি খুব দ্রুত গতি ছাড়াই তত্ত্বের মধ্য দিয়ে চলতে অবিশ্বাস্যভাবে ভাল।

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

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

এই প্রশ্নের মধ্যে শেখার জন্য প্রচুর সংস্থান রয়েছে এবং আমি একত্রে নিক্ষেপ করেছি একটি ফ্লেক্স কঙ্কাল।


1

তবুও, আমি প্রথমে সমস্যাটি / "টোকেনাইজ" স্ট্রিংটি সমাধান করার সহজ উপায় নেই তা নিশ্চিত করার চেষ্টা করি।

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

এখানে একটি উদাহরণ:

string = "Sep 22 19:57:38 host fcron[9137]: \
          Job fbsetbg -r $HOME/backgrounds/ \
          started for user user (pid 9138)"

মিনিট মেলে:

string.match /^\w+\s\d+\s\d+:(\d+):\d+\s\w+\s/ # correct but bad
string.match /\d+:([^:]+):\d+/                 # correct and good

অন্য সমস্ত কিছুর পাশাপাশি সময় সন্ধান করার পরিবর্তে পৃথক সীমানা সন্ধান করার চেষ্টা করুন।

উদাহরণটি কিছুটা স্বীকৃত, তবে যা কিছু আমি সামনে আসতে পেরেছিলাম।


1

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

স্ক্রিপ্টটির প্রতিটি ওপেন সোর্স প্রকল্পে বিভিন্ন ফাইলের বিরুদ্ধে চালানো দরকার। তারপরে বিভিন্ন স্টাইল সহ বিভিন্ন প্রকল্পের বিরুদ্ধে চালানো যেতে পারে। আমি খুব সাধারণ কিছু দিয়ে শুরু করেছিলাম %s/before/after তখন আমি দেখতে পেলাম যে এটির সাথে অনেকগুলি মামলা মিলেছে। তাই আমি তা আটকাতে আরও স্টাফ যুক্ত করেছি। তারপরে আমি বিভিন্ন সিনট্যাক্স শৈলী ব্যবহার করে বিভিন্ন প্রকল্প খুঁজে পেয়েছি যার বিভিন্ন পরিবর্তনের প্রয়োজন।

শেষ পর্যন্ত আমার সাথে শেষ

  • নিয়মিত এক্সপ্রেশন সম্পর্কে দুর্দান্ত দক্ষতা এবং জ্ঞান
  • সেড সঙ্গে ভাল দক্ষতা
  • অনেক ওপেন সোর্স প্রকল্প সাহায্য করে
  • আমার গিথুব প্রোফাইলে প্রচুর অবদানের ক্রিয়াকলাপ দেখানো হচ্ছে
  • ভার্চুয়াল টুলবেল্টের জন্য আরও একটি ভাল 'সুইস-আর্মি ছুরি' সরঞ্জাম

এবং প্রয়োজনে এই পদ্ধতিতে সহায়তা করা হয়েছিল

  • প্রতারণা না করে প্রকৃত লক্ষ্য অর্জন করুন
  • বৃহত্তর প্রেরণা সহ বৃহত্তর লক্ষ্যের অংশ হিসাবে (রেজেক্স) দক্ষতা ব্যবহার করুন।
  • অন্যদের কোড পরিবর্তন করে এবং তারপরে পরিবর্তনগুলি পর্যালোচনা করে আমি যে দক্ষতাগুলি শিখেছি তার প্রমাণ দেখাতে সক্ষম হোন।

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

এক সাইটে একাধিক ভাষায় regexes

  • http://regex101.com/ জাভাস্ক্রিপ্ট / পিএইচপি / পাইথন
  • http://myregextester.com/ পিএইচপি / জাভা / জেএস / এএসপি /। নেট / সি # / ভিবি.এনইটি

ম্যাচ গ্রুপগুলিতে ফোকাস করুন:


0

আমি গুণের টেবিলগুলি শেখার অনুরূপ নিয়মিত প্রকাশগুলি শিখতে পেরেছি - হ্যাঁ, এর পিছনে থাকা ধারণাগুলি আপনার বুঝতে হবে, তবে শেষ পর্যন্ত আপনাকে কেবল এটি বারবার এবং বারবার করতে হবে।

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

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

আমি এই অনলাইন সরঞ্জামটিকেও সহায়ক বলে মনে করেছি, কারণ এটি আসল সময়ে আমার রেজেক্স পরীক্ষা করতে দেয়: http://www.gethifi.com/tools/regex

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