নিয়মিত ভাব প্রকাশ করা [বন্ধ]


166

আমি আসলেই নিয়মিত ভাব প্রকাশ করি না। আপনি কি আমাকে সহজে-অনুসরণ-পদ্ধতিতে ব্যাখ্যা করতে পারেন? যদি কোনও অনলাইন সরঞ্জাম বা বই থাকে তবে আপনি কি তাদের সাথে লিঙ্ক করতে পারেন?

উত্তর:


789

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

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

সহজ শুরু করুন

ধারণাগতভাবে, সাধারণ নিয়মিত প্রকাশগুলি হ'ল আক্ষরিক অক্ষর। প্যাটার্নটি N'এন' অক্ষরের সাথে মেলে।

একে অপরের ম্যাচের ক্রমগুলির পাশে নিয়মিত প্রকাশ। উদাহরণস্বরূপ, প্যাটার্নটি Nick'এন' এর পরে 'আই' এর পরে 'সি' এর পরে 'কে' অনুসারে মিলবে।

আপনি যদি grepইউনিক্সে কখনও ব্যবহার করেছেন only এমনকি যদি কেবল সাধারণ সন্ধানের স্ট্রিংগুলি অনুসন্ধান করার জন্যও থাকে - আপনি ইতিমধ্যে নিয়মিত প্রকাশ প্রকাশ করেছেন! ( reমধ্যে grepরেগুলার এক্সপ্রেশনের বোঝায়।)

মেনু থেকে অর্ডার

সামান্য জটিলতা যুক্ত করে আপনি প্যাটার্নটির সাথে 'নিক' বা 'নিক' মেলাতে পারেন [Nn]ick। বর্গাকার বন্ধনীগুলির অংশটি একটি অক্ষর শ্রেণি , যার অর্থ এটি আবদ্ধ অক্ষরের মধ্যে একটির সাথে মেলে। আপনি অক্ষর শ্রেণিতে রেঞ্জগুলিও ব্যবহার করতে পারেন, তাই [a-c]'এ' বা 'বি' বা 'সি' এর সাথে মেলে।

প্যাটার্ন .বিশেষ: বদলে আক্ষরিক ডট মিলে শুধুমাত্র মিলবে কোনো চরিত্র । এটি সত্যই বড় চরিত্র শ্রেণীর মত ধারণাগতভাবে একই [-.?+%$A-Za-z0-9...]

চরিত্রের ক্লাসগুলি মেনু হিসাবে ভাবেন: কেবল একটি বেছে নিন।

সহায়ক শর্টকাট

ব্যবহার .আপনাকে টাইপিং প্রচুর সংরক্ষণ করতে পারে এবং সাধারণ নিদর্শনগুলির জন্য অন্যান্য শর্টকাট রয়েছে। ওয়ান ওয়ে লেখার যে: আপনি একটি অঙ্ক মেলাতে চান বলুন [0-9]। অঙ্কগুলি একটি ঘন ঘন ম্যাচের লক্ষ্য, সুতরাং আপনি পরিবর্তে শর্টকাটটি ব্যবহার করতে পারেন \d। অন্যগুলি \sহ'ল (শ্বেতস্থান) এবং \w(শব্দের অক্ষর: অক্ষর বা আন্ডারস্কোর)।

বড় আকারের রূপগুলি তাদের পরিপূরক, সুতরাং উদাহরণস্বরূপ যে \Sকোনও অ- সাদা স্থানের অক্ষরের সাথে মেলে ।

একবার যথেষ্ট নয়

সেখান থেকে, আপনি কোয়ান্টিফায়ার দিয়ে আপনার প্যাটার্নের কিছু অংশ পুনরাবৃত্তি করতে পারেন । উদাহরণস্বরূপ, প্যাটার্নটি ab?c'এবিসি' বা 'এসি' এর সাথে মেলে কারণ ?কোয়ান্টিফায়ারটি সাবপ্যাটারটিকে এটি itচ্ছিক পরিবর্তন করে। অন্য কোয়ান্টিফায়াররা হলেন

  • * (শূন্য বা আরও বার)
  • + (এক বা একাধিকবার)
  • {n}(ঠিক n বার)
  • {n,}(কমপক্ষে n বার)
  • {n,m}(কমপক্ষে n বার তবে m বারের বেশি নয় )

এর মধ্যে কয়েকটি ব্লককে একসাথে রাখলে প্যাটার্নটি সমস্তটির সাথে [Nn]*ickমেলে

  • ick
  • শুভক্ষণ
  • শুভক্ষণ
  • Nnick
  • nNick
  • nnick
  • (এবং এইভাবে)

প্রথম ম্যাচটি একটি গুরুত্বপূর্ণ পাঠ প্রদর্শন করে: *সর্বদা সফল হয়! যে কোনও প্যাটার্ন শূন্য বারের সাথে মেলাতে পারে।

আরও কয়েকটি দরকারী উদাহরণ:

  • [0-9]+(এবং এর সমতুল্য \d+) কোনও অ-নেতিবাচক পূর্ণসংখ্যার সাথে মেলে
  • \d{4}-\d{2}-\d{2} 2019-01-01 এর মতো ফর্ম্যাটেড তারিখগুলি মিলবে

গোষ্ঠীবদ্ধ

একটি কোয়ান্টিফায়ার তার তাত্ক্ষণিক বামে প্যাটার্নটি পরিবর্তন করে। আপনি 0abc+0'0abc0', '0abcabc0', এবং আরও অনেক কিছু মিলানোর প্রত্যাশা করতে পারেন তবে প্লাস কোয়ান্টিফায়ারের বাম দিকে অবিলম্বে প্যাটার্নটি c। এর অর্থ 0abc+0'0abc0', '0abcc0', '0abccc0', এবং আরও কিছু মিল আছে।

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

পরিক্রমণ

এর আগে, আমরা 'নিক' বা 'নিক' দুটির সাথে মিলে যাওয়ার একটি উপায় দেখেছি। অন্য হিসাবে বিকল্প হিসাবে আছে Nick|nick। মনে রাখবেন যে বিকল্পটি তার বামে এবং ডানদিকে সবকিছু অন্তর্ভুক্ত করে। করার সুযোগ সীমিত করতে প্রথম বন্ধনী গোষ্ঠীবদ্ধ ব্যবহার করুন |, যেমন , (Nick|nick)

অন্য উদাহরণের জন্য, আপনি সমতুল্য [a-c]হিসাবে লিখতে পারেন a|b|c, তবে এটি সম্ভবত সাবমোটিমাল হতে পারে কারণ অনেকগুলি বাস্তবায়ন ধরে নেয় বিকল্পগুলির দৈর্ঘ্য 1 এর চেয়ে বেশি হবে।

পলায়নপর

যদিও কিছু চরিত্র নিজের সাথে মেলে তবে অন্যের বিশেষ অর্থ রয়েছে। প্যাটার্নটি \d+ব্যাকস্ল্যাশের সাথে মেলে না এবং তারপরে লোয়ারকেস ডি এর পরে একটি প্লাস চিহ্ন থাকবে: এটি পেতে, আমরা ব্যবহার করব \\d\+। একটি ব্যাকস্ল্যাশ নিম্নলিখিত অক্ষর থেকে বিশেষ অর্থ মুছে ফেলে।

লালসা

নিয়মিত এক্সপ্রেশন কোয়ান্টিফায়ার লোভী। এর অর্থ তারা পুরো প্যাটার্নটিকে সাফল্যের সাথে মেলাতে দেওয়ার সময় তারা যতটা সম্ভব টেক্সট মেলে।

উদাহরণস্বরূপ, ইনপুটটি বলুন

"হ্যালো," তিনি বললেন, কেমন আছেন?

আপনি ".+"কেবল 'হ্যালো' এর সাথে মিল রেখে প্রত্যাশা করতে পারেন এবং তারপরে আপনি যখন দেখবেন যে এটি 'হ্যালো' এর সাথে 'আপনার?' এর মাধ্যমে মিলেছে।

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

যদি আপনার ইনপুটটি '(123) (456)' হয়, তবে প্রথম ক্যাপচারটি '123' হবে। অ-লোভী কোয়ান্টিফায়াররা যত তাড়াতাড়ি সম্ভব বাকি প্যাটার্নটি মেলানো শুরু করতে চায়।

(আপনার বিভ্রান্তির হিসাবে আমি কোনও নিয়মিত-অভিব্যক্তি উপভাষার ((.+?))কথা জানি না যেখানে একই জিনিসটি হবে I আমি সন্দেহ করি যে পথে কিছুটা সংক্রমণে কিছু হারিয়ে গেছে lost)

নোঙ্গর

^শুধুমাত্র আপনার ইনপুটটির শুরুতে এবং কেবল শেষে মিলতে বিশেষ প্যাটার্নটি ব্যবহার করুন $। আপনি যেখানে বলেছেন সেখানে আপনার নিদর্শনগুলির সাথে "বুকেন্ডস" তৈরি করা "আপনার সামনে এবং পিছনে কী আছে তা আমি জানি তবে এর মধ্যে আমাকে সবকিছু দিন" একটি দরকারী কৌশল।

বলুন আপনি ফর্মের মন্তব্যে মিল করতে চান

-- This is a comment --

আপনি লিখবেন ^--\s+(.+)\s+--$

আপনার নিজের তৈরি করুন

নিয়মিত প্রকাশগুলি পুনরাবৃত্ত হয়, সুতরাং এখন আপনি এই মৌলিক নিয়মগুলি বুঝতে পেরে আপনি নিজের পছন্দ মতো এগুলি একত্রিত করতে পারেন।

রেজিেক্সগুলি লেখার এবং ডিবাগ করার সরঞ্জামগুলি:

বই

বিনামূল্যে সংস্থান

পাদটীকা

।: উপরের বিবৃতিটি যে .কোনও চরিত্রের সাথে মিলেছে তা শিক্ষাগত উদ্দেশ্যগুলির জন্য সরলকরণ যা কঠোরভাবে সত্য নয়। ডট নিউলাইন ব্যতীত অন্য কোনও চরিত্রের সাথে মেলে "\n"তবে অনুশীলনে আপনি খুব কমই কোনও প্যাটার্ন আশা করে যেমন .+একটি নিউলাইন সীমানা অতিক্রম করে। পার্ল রেইগেক্সগুলির একটি /sসুইচ এবং জাভা রয়েছে Pattern.DOTALL, উদাহরণস্বরূপ, .যেকোন চরিত্রকে মিলিয়ে তুলতে । যে ভাষাগুলিতে এ জাতীয় বৈশিষ্ট্য নেই, আপনি [\s\S]অন্য শব্দগুলিতে কিছু "কোনও শ্বেতস্থান বা কোনও সাদা-স্থান" এর সাথে মিলে যাওয়ার মতো কিছু ব্যবহার করতে পারেন ।


14
আপনি ট্রায়াল এবং ত্রুটি পদ্ধতিটিও ব্যবহার করতে পারেন এবং অনলাইন রেইগেক্স পরীক্ষক এবং ডিবাগার অনুসরণ করার চেয়ে বিশাল সহায়ক হতে পারে: regex101.com
Juraj.Lorinc

2
এটি উল্লেখ করার মতো হবে যে, একটি অনুরূপ প্যাটার্ন হওয়া সত্ত্বেও a{,m}কোনও জিনিস নয়, অন্তত জাভাস্ক্রিপ্ট, পার্ল এবং পাইথন-এ।
ফান্ড মনিকার লসুইট

2
এটি উল্লেখ করা খুব প্রয়োজন যে এখানে নিয়মিত প্রকাশের বিভিন্ন ধরণের ইঞ্জিন রয়েছে যার সাথে সমস্ত বৈশিষ্ট্য সেট এবং সিনট্যাকটিক নিয়ম রয়েছে।
hek2mgl

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

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