C ++ এ রেগুলার এক্সপ্রেশন বুনিয়াদি

Regular Expression Basics C



উদ্ধৃতিতে নিম্নলিখিত বাক্যটি বিবেচনা করুন:

'এই যে আমার মানুষ।'

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







'এই যে আমার মহিলা।'

কম্পিউটার ব্যবহারকারীর থেকে এরকম আরো অনেক ইচ্ছা আছে; কিছু জটিল। রেগুলার এক্সপ্রেশন, সংক্ষিপ্ত, রেজেক্স, কম্পিউটার দ্বারা এই সমস্যাগুলি পরিচালনা করার বিষয়। C ++ regex নামে একটি লাইব্রেরি নিয়ে আসে। সুতরাং, রেজেক্স পরিচালনা করার জন্য একটি C ++ প্রোগ্রাম শুরু করা উচিত:



#অন্তর্ভুক্ত

#অন্তর্ভুক্ত

নামস্থান std ব্যবহার করে;

এই নিবন্ধটি C ++ এ রেগুলার এক্সপ্রেশন বুনিয়াদি ব্যাখ্যা করে।



নিবন্ধ বিষয়বস্তু

রেগুলার এক্সপ্রেশন ফান্ডামেন্টালস

রেজেক্স

এখানে একটি স্ট্রিং আমার মানুষ। উপরে লক্ষ্য ক্রম বা লক্ষ্য স্ট্রিং বা সহজভাবে, লক্ষ্য। মানুষ, যা জন্য অনুসন্ধান করা হয়েছিল, নিয়মিত অভিব্যক্তি, বা সহজভাবে, regex।





মিলছে

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

সহজ মিল

নিচের প্রোগ্রামটি দেখায় কিভাবে মানুষ শব্দটি মিলে যায়।



#অন্তর্ভুক্ত

#অন্তর্ভুক্ত

নামস্থান std ব্যবহার করে;

intপ্রধান()
{

regex reg('মানুষ');
যদি (regex_search('এই যে আমার মানুষ।',reg))
খরচ<< 'মিলে গেছে' <<endl;
অন্য
খরচ<< 'মিলছে না' <<endl;

প্রত্যাবর্তন 0;
}

Regex_search () ফাংশনটি যদি সত্য হয় এবং যদি কোন মিল না থাকে তবে মিথ্যা প্রদান করে। এখানে, ফাংশনটি দুটি আর্গুমেন্ট নেয়: প্রথমটি হল টার্গেট স্ট্রিং, এবং দ্বিতীয়টি হল রেজেক্স অবজেক্ট। Regex নিজেই 'মানুষ', দ্বি-উদ্ধৃতিতে। মেইন () ফাংশনের প্রথম স্টেটমেন্ট রেজেক্স অবজেক্ট গঠন করে। Regex একটি প্রকার, এবং reg হল regex বস্তু। উপরের প্রোগ্রামটির আউটপুট 'মিলেছে', যেহেতু 'ম্যান' টার্গেট স্ট্রিংয়ে দেখা যায়। যদি 'মানুষ' লক্ষ্যবস্তুতে না দেখা যায়, তাহলে

নিম্নলিখিত কোডের আউটপুট মিলছে না:

regex reg('মানুষ');
যদি (regex_search('এখানে আমার তৈরি।',reg))
খরচ<< 'মিলে গেছে' <<endl;
অন্য
খরচ<< 'মিলছে না' <<endl;

মেলে না কারণ রেজেক্স 'ম্যান' পুরো টার্গেট স্ট্রিংয়ে পাওয়া যায়নি, 'এখানে আমার তৈরি।'

প্যাটার্ন

নিয়মিত অভিব্যক্তি, উপরের মানুষ, খুব সহজ। Regexes সাধারণত যে সহজ নয়। রেগুলার এক্সপ্রেশনে মেটাচরিত্র আছে। Metacharacters বিশেষ অর্থ সঙ্গে অক্ষর হয়। একটি মেটাচরিত্র হল চরিত্র সম্পর্কে একটি চরিত্র। C ++ regex metacharacters হল:

^$।* + ? ( ) [ ] { } |

একটি regex, metacharacters সঙ্গে বা ছাড়া, একটি প্যাটার্ন।

ক্যারেক্টার ক্লাস

চতুস্কন বন্ধনী

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

'বিড়াল ঘরে আছে।'

'ব্যাট রুমে আছে।'

'ইঁদুর ঘরে আছে।'

রেজেক্স, [cbr] এ প্রথম টার্গেটে বিড়ালের সাথে মিলবে। এটি দ্বিতীয় টার্গেটে ব্যাট মিলবে। এটি তৃতীয় লক্ষ্যে ইঁদুরের সাথে মিলবে। এর কারণ হল, বিড়াল বা বাদুড় বা ইঁদুর শুরু হয় 'সি' বা 'বি' বা 'আর' দিয়ে। নিম্নলিখিত কোড সেগমেন্ট এটি ব্যাখ্যা করে:

regex reg('[cbr] এ');
যদি (regex_search('বিড়াল ঘরে আছে।',reg))
খরচ<< 'মিলে গেছে' <<endl;
যদি (regex_search('ব্যাট রুমে আছে।',reg))
খরচ<< 'মিলে গেছে' <<endl;
যদি (regex_search('ইঁদুর ঘরে আছে।',reg))
খরচ<< 'মিলে গেছে' <<endl;

আউটপুট হল:

মিলেছে

মিলেছে

মিলেছে

অক্ষরের পরিসীমা

[Cbr] প্যাটার্নে [cbr] ক্লাস, লক্ষ্যবস্তুর বেশ কয়েকটি সম্ভাব্য অক্ষরের সাথে মিলবে। এটি টার্গেটে 'c' বা 'b' বা 'r' এর সাথে মিলবে। যদি টার্গেটে 'c' বা 'b' বা 'r' না থাকে, তাহলে এটার সাথে মিল থাকবে না।

'C' বা 'b' বা 'r' এর মতো কিছু সম্ভাবনা একটি পরিসরে বিদ্যমান। ডিজিটের পরিসীমা, 0 থেকে 9 এর 10 টি সম্ভাবনা রয়েছে এবং এর জন্য প্যাটার্ন হল [0-9]। ছোট হাতের বর্ণমালার পরিসর, a থেকে z, এর 26 টি সম্ভাবনা রয়েছে এবং এর জন্য প্যাটার্ন হল [a-z]। বড় হাতের বর্ণমালার পরিসর, A থেকে Z, এর 26 টি সম্ভাবনা রয়েছে এবং এর জন্য প্যাটার্ন হল [A-Z]। - আনুষ্ঠানিকভাবে একটি মেটাচরিত্র নয়, কিন্তু বর্গাকার বন্ধনীগুলির মধ্যে, এটি একটি পরিসীমা নির্দেশ করবে। সুতরাং, নিম্নলিখিত একটি মিল তৈরি করে:

যদি (regex_search('ID6id',regex('[0-9]')))

খরচ<< 'মিলে গেছে' <<endl;

উল্লেখ্য কিভাবে regex দ্বিতীয় আর্গুমেন্ট হিসাবে নির্মিত হয়েছে। ম্যাচটি সংখ্যার মধ্যে 6, পরিসরে 6, 0 থেকে 9 এবং লক্ষ্য 6, ID6id এর মধ্যে ঘটে। উপরের কোডটি এর সমতুল্য:

যদি (regex_search('ID6id',regex('[0123456789]')))

খরচ<< 'মিলে গেছে' <<endl;

নিম্নলিখিত কোডটি একটি ম্যাচ তৈরি করে:

গৃহস্থালিপৃ[] = 'ID6iE';

যদি (regex_search(পৃ,regex('[a-z]')))

খরচ<< 'মিলে গেছে' <<endl;

লক্ষ্য করুন যে এখানে প্রথম যুক্তিটি একটি স্ট্রিং ভেরিয়েবল এবং স্ট্রিং আক্ষরিক নয়। ম্যাচটি 'i' [a-z] এবং ID6iE- এ 'i' এর মধ্যে।

ভুলে যাবেন না যে একটি পরিসীমা একটি শ্রেণী। প্যাটার্নে রেঞ্জের ডান দিকে বা রেঞ্জের বামে টেক্সট থাকতে পারে। নিম্নলিখিত কোডটি একটি ম্যাচ তৈরি করে:

যদি (regex_search('ID2id একটি আইডি ',regex('আইডি [0-9] আইডি')))

খরচ<< 'মিলে গেছে' <<endl;

ম্যাচটি ID [0-9] id এবং ID2id এর মধ্যে। টার্গেট স্ট্রিং বাকি, একটি আইডি, এই অবস্থায় মিলছে না।

যেমন রেগুলার এক্সপ্রেশন সাবজেক্টে (regexes) ব্যবহৃত হয়, ক্লাস শব্দটির অর্থ আসলে একটি সেট। অর্থাৎ সেটের একটি অক্ষর মিলে যায়।

দ্রষ্টব্য: হাইফেন - শুধুমাত্র বর্গ বন্ধনীগুলির মধ্যে একটি মেটাচরাচর, যা একটি পরিসীমা নির্দেশ করে। এটি বর্গাকার বন্ধনীর বাইরে, রেজেক্সে একটি মেটাচরিত্র নয়।

ঘৃণা

একটি শ্রেণী সহ একটি বর্গকে অস্বীকার করা যেতে পারে। অর্থাৎ, সেটের (অক্ষরের) অক্ষরের সাথে মিল থাকা উচিত। বর্গ বন্ধনী খোলার ঠিক পরে, ক্লাস প্যাটার্নের শুরুতে এটি ^ metacharacter দিয়ে নির্দেশিত হয়। সুতরাং, [^0-9] মানে টার্গেটের যথাযথ অবস্থানে চরিত্রের সাথে মিল, যা 0 থেকে 9 সহ পরিসরের কোন অক্ষর নয়। সুতরাং নিম্নলিখিত কোডটি একটি মিল তৈরি করবে না:

যদি (regex_search('0123456789101112',regex('[^ 0-9]')))

খরচ<< 'মিলে গেছে' <<endl;

অন্য

খরচ<< 'মিলছে না' <<endl;

0 থেকে 9 রেঞ্জের মধ্যে একটি অঙ্ক লক্ষ্য স্ট্রিং পজিশনে পাওয়া যেতে পারে, 0123456789101112 ,; তাই কোন মিল নেই - নেতিবাচক।

নিম্নলিখিত কোডটি একটি ম্যাচ তৈরি করে:

যদি (regex_search('ABCDEFGHIJ',regex('[^ 0-9]')))

খরচ<< 'মিলে গেছে' <<endl;

ABCDEFGHIJ, টার্গেটে কোন ডিজিট পাওয়া যায়নি; তাই একটি ম্যাচ আছে

[a-z] হল [^a-z] এর বাইরে একটি পরিসীমা। এবং তাই [^a-z] হল [a-z] এর নেতিবাচকতা।

[A-Z] হল [^A-Z] এর বাইরে একটি পরিসীমা। আর তাই [^A-Z] হল [A-Z] এর নেতিবাচকতা।

অন্যান্য নেতিবাচকতা বিদ্যমান।

হোয়াইটস্পেস মিলছে

'' বা t বা r বা n বা f একটি হোয়াইটস্পেস চরিত্র। নিম্নলিখিত কোডে, রেজেক্স, n লক্ষ্যমাত্রায় ' n' এর সাথে মেলে:

যদি (regex_search('লাইন এক। আরnদুই লাইনের। ',regex('n')))

খরচ<< 'মিলে গেছে' <<endl;

যেকোনো হোয়াইটস্পেস চরিত্রের সাথে মিল

যে কোনো সাদা স্থান চরিত্রের সাথে মেলে এমন প্যাটার্ন বা ক্লাস হল, [ t r n f]। নিম্নলিখিত কোডে, '' মিলেছে:

যদি (regex_search('এক দুই',regex('[। টি আরn] ')))

খরচ<< 'মিলে গেছে' <<endl;

যে কোনও অ-হোয়াইটস্পেস চরিত্রের সাথে মিল

প্যাটার্ন বা শ্রেণী যে কোন অ-সাদা স্থান অক্ষরের সাথে মেলে, [^ t r n f]। নিচের কোডটি একটি ম্যাচ তৈরি করে কারণ টার্গেটে কোন হোয়াইটস্পেস নেই:

যদি (regex_search('1234abcd',regex('[। টি আরn] ')))

খরচ<< 'মিলে গেছে' <<endl;

প্যাটার্নের সময়কাল (।)

প্যাটার্নের পিরিয়ড (।) টার্গেটে n ব্যতীত নিজের সহ যেকোনো চরিত্রের সাথে মেলে। নিম্নলিখিত কোডে একটি ম্যাচ তৈরি করা হয়:

যদি (regex_search('1234abcd',regex('।')))

খরচ<< 'মিলে গেছে' <<endl;

নিচের কোডে কোন মিল নেই কারণ লক্ষ্য হল n।

যদি (regex_search('n',regex('।')))

খরচ<< 'মিলে গেছে' <<endl;

অন্য

খরচ<< 'মিলছে না' <<endl;

দ্রষ্টব্য: বর্গাকার বন্ধনী সহ একটি অক্ষর শ্রেণীর ভিতরে, পিরিয়ডের কোন বিশেষ অর্থ নেই।

পুনরাবৃত্তির মিল

একটি অক্ষর বা অক্ষরের একটি গ্রুপ লক্ষ্য স্ট্রিং এর মধ্যে একাধিকবার ঘটতে পারে। একটি প্যাটার্ন এই পুনরাবৃত্তির সাথে মেলে। টার্গেটে পুনরাবৃত্তির সাথে মেলাতে মেটাচক্র,?, *, +, এবং {} ব্যবহার করা হয়। যদি x টার্গেট স্ট্রিংয়ে আগ্রহের একটি চরিত্র হয়, তাহলে মেটাচক্রের নিম্নলিখিত অর্থ রয়েছে:

এক্স*:মানে ম্যাচ'এক্স' 0অথবা আরো বার,আমিএবং,যে কোন সময়

এক্স+:মানে ম্যাচ'এক্স' অথবা আরো বার,আমিএবং,অন্তত একবার

এক্স? :মানে ম্যাচ'এক্স' 0অথবা সময়

এক্স{n,}:মানে ম্যাচ'এক্স'কমপক্ষে n বা তার বেশি বার।বিঃদ্রঃকমা।

এক্স{n} :ম্যাচ'এক্স'ঠিক n বার

এক্স{n,মি}:ম্যাচ'এক্স'অন্তত n বার,কিন্তু m বারের বেশি নয়।

এই metacharacters বলা হয় পরিমান

দৃষ্টান্ত

*

* পূর্ববর্তী অক্ষর বা পূর্ববর্তী গোষ্ঠীর সাথে মেলে, শূন্য বা তার বেশি বার। o* টার্গেট স্ট্রিং এর কুকুরের সাথে 'o' মিলে যায়। এটি বই এবং খোঁজার মধ্যেও মেলে। Regex, o* মেলে boooo মধ্যে the animal booooed .. দ্রষ্টব্য: o* dig dig, যেখানে 'o' শূন্য (বা আরো) সময় ঘটে।

+

+ পূর্ববর্তী অক্ষর বা পূর্ববর্তী গোষ্ঠীর সাথে 1 বা তার বেশি বার মেলে। *এর জন্য শূন্য বা তার বেশি বার এর সাথে তুলনা করুন। সুতরাং regex, e+ মিলে 'e' খায়, যেখানে 'e' একবার ঘটে। e+ ভেড়ায় ee এর সাথেও মিলে যায়, যেখানে 'e' একাধিকবার ঘটে। দ্রষ্টব্য: e+ খনির সাথে মিলবে না কারণ খনিতে 'e' অন্তত একবার হয় না।

?

দ্য ? পূর্ববর্তী চরিত্র বা পূর্ববর্তী গোষ্ঠীর সাথে মেলে, 0 বা 1 বার (এবং বেশি নয়)। তাই, ই? খনন মেলে কারণ খনিতে 'ই' ঘটে, শূন্য সময়। ই? ম্যাচগুলি সেট করা হয়েছে কারণ 'ই' সেটে একবার ঘটে। দ্রষ্টব্য: ই? এখনও ভেড়া মেলে; যদিও ভেড়ায় দুটি 'ই' আছে। এখানে একটি সূক্ষ্মতা আছে - পরে দেখুন।

{n,}

এটি পূর্ববর্তী চরিত্র বা পূর্ববর্তী গোষ্ঠীর অন্তত n পরপর পুনরাবৃত্তির সাথে মেলে। সুতরাং regex, e {2,} লক্ষ্যবস্তুতে দুটি 'e', ​​ভেড়া এবং তিনটি 'e' গুলি টার্গেট শেইপের সাথে মিলে যায়। e {2,} সেটের সাথে মেলে না, কারণ সেটে শুধুমাত্র একটি 'e' থাকে।

{n}

এটি পূর্ববর্তী চরিত্র বা পূর্ববর্তী গোষ্ঠীর ঠিক n পরপর পুনরাবৃত্তির সাথে মেলে। সুতরাং regex, e {2} লক্ষ্যবস্তু দুটি ভেড়ার সাথে মিলে। e {2} সেটের সাথে মেলে না কারণ সেটে শুধুমাত্র একটি 'e' থাকে। আচ্ছা, ই {2} লক্ষ্যবস্তুতে দুটি 'ই'র সাথে মিলেছে, শেইপ। এখানে একটি সূক্ষ্মতা আছে - পরে দেখুন।

{n, m}

এটি পূর্ববর্তী চরিত্র বা পূর্ববর্তী গোষ্ঠীর ধারাবাহিক বেশ কয়েকটি পুনরাবৃত্তির সাথে মিলে যায়, n থেকে m পর্যন্ত যেকোনো জায়গায়। সুতরাং, e {1,3} খনিতে কোন কিছুর সাথেই মিলছে না, যার কোন 'e' নেই। এটি সেটের মধ্যে একটি 'ই', ভেড়ার মধ্যে দুটি 'ই', শেইপে তিনটি 'ই' এবং শিপে তিনটি 'ই' এর সাথে মিলে যায়। শেষ ম্যাচে একটি সূক্ষ্মতা আছে - পরে দেখুন।

মেলানো বিকল্প

কম্পিউটারে নিম্নলিখিত টার্গেট স্ট্রিং বিবেচনা করুন।

খামারে বিভিন্ন আকারের শূকর রয়েছে।

প্রোগ্রামার জানতে চাইতে পারেন যে এই টার্গেটে ছাগল বা খরগোশ বা শুয়োর আছে কিনা। কোডটি নিম্নরূপ হবে:

গৃহস্থালিপৃ[] = 'খামারে বিভিন্ন আকারের শূকর আছে।';

যদি (regex_search(পৃ,regex('ছাগল | খরগোশ | শূকর')))

খরচ<< 'মিলে গেছে' <<endl;

অন্য

খরচ<< 'মিলছে না' <<endl;

কোড একটি মিল তৈরি করে। বিকল্প অক্ষরের ব্যবহার লক্ষ্য করুন, |। দুটি, তিন, চার, এবং আরো বিকল্প হতে পারে। C ++ প্রথমে টার্গেট স্ট্রিং এর প্রতিটি অক্ষরের অবস্থানে প্রথম বিকল্প, ছাগলকে মেলাতে চেষ্টা করবে। যদি এটি ছাগল দিয়ে সফল না হয়, তাহলে এটি পরবর্তী বিকল্প, খরগোশ চেষ্টা করে। যদি এটি খরগোশের সাথে সফল না হয়, তবে এটি পরবর্তী বিকল্প, শূকর চেষ্টা করে। যদি শূকর ব্যর্থ হয়, তাহলে C ++ টার্গেটে পরবর্তী অবস্থানে চলে যায় এবং আবার প্রথম বিকল্প দিয়ে শুরু হয়।

উপরের কোডে, শূকর মিলেছে।

শুরু বা শেষের মিল

শুরু


যদি the রেজেক্সের শুরুতে থাকে, তাহলে টার্গেট স্ট্রিংয়ের শুরুতে লেখাটি রেজেক্সের সাথে মিলে যেতে পারে। নিম্নলিখিত কোডে, টার্গেটের শুরু হল abc, যা মিলেছে:

যদি (regex_search('abc এবং def',regex('^ abc')))

খরচ<< 'মিলে গেছে' <<endl;

নিম্নলিখিত কোডে কোন মিল নেই:

যদি (regex_search('হ্যাঁ, abc এবং def',regex('^ abc')))

খরচ<< 'মিলে গেছে' <<endl;

অন্য

খরচ<< 'মিলছে না' <<endl;

এখানে, abc টার্গেটের শুরুতে নেই।

দ্রষ্টব্য: সার্কফ্লেক্স অক্ষর, '^', রেজেক্সের শুরুতে একটি মেটা চরিত্র, যা টার্গেট স্ট্রিংয়ের শুরুর সাথে মিলে যায়। এটি এখনও অক্ষর শ্রেণীর শুরুতে একটি মেটাচরিত্র, যেখানে এটি শ্রেণীকে অস্বীকার করে।

শেষ

যদি $ regex এর শেষে হয়, তাহলে টার্গেট স্ট্রিং এর শেষ লেখা regex দ্বারা মিলানো যেতে পারে। নিম্নলিখিত কোডে, টার্গেটের শেষটি xyz, যা মিলেছে:

যদি (regex_search('uvw এবং xyz',regex('xyz $')))

খরচ<< 'মিলে গেছে' <<endl;

নিম্নলিখিত কোডে কোন মিল নেই:

যদি (regex_search('uvw এবং xyz চূড়ান্ত',regex('xyz $')))

খরচ<< 'মিলে গেছে' <<endl;

অন্য

খরচ<< 'মিলছে না' <<endl;

এখানে, xyz টার্গেটের শেষে নেই।

গ্রুপিং

একটি প্যাটার্নে অক্ষর গোষ্ঠীভুক্ত করার জন্য বন্ধনী ব্যবহার করা যেতে পারে। নিম্নলিখিত regex বিবেচনা করুন:

'একটি কনসার্ট (পিয়ানোবাদক)'

এখানকার দলটি পিয়ানোবাদক, যাকে ঘিরে আছে মেটাচরা (এবং)। এটি আসলে একটি সাব-গ্রুপ, যখন একটি কনসার্ট (পিয়ানোবাদক) পুরো গ্রুপ। নিম্নোক্ত বিবেচনা কর:

'(পিয়ানোবাদক ভাল)'

এখানে, সাব-গ্রুপ বা সাব-স্ট্রিং হল, পিয়ানোবাদক ভালো।

সাধারণ অংশ সহ সাব-স্ট্রিং

একজন বইকিপার এমন একজন ব্যক্তি যিনি বইয়ের যত্ন নেন। একটি বইখাতা এবং বুকশেলফ সহ একটি লাইব্রেরি কল্পনা করুন। অনুমান করুন যে নিম্নলিখিত টার্গেট স্ট্রিংগুলির মধ্যে একটি কম্পিউটারে রয়েছে:

'লাইব্রেরির একটি বুকশেলফ আছে যা প্রশংসিত।';

'এই যে বইখাতা।';

'বুক কিপার বুকশেলফ নিয়ে কাজ করে।';

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

'বুকশেলফ | বুক কিপার।'

বিকল্প ব্যবহার করে।

লক্ষ্য করুন যে বই, যা উভয় শব্দের জন্য সাধারণ, প্যাটার্নের দুটি শব্দে দুবার টাইপ করা হয়েছে। দুবার টাইপ করা বই এড়ানোর জন্য, রেজেক্স আরও ভালভাবে লেখা হবে:

'বই (তাক | রক্ষক)'

এখানে, গোষ্ঠী, বালুচর | রক্ষক অল্টারনেশন মেটাচারেক্টার এখনও ব্যবহৃত হয়েছে, কিন্তু দুটি দীর্ঘ শব্দের জন্য নয়। এটি দুটি দীর্ঘ শব্দের দুটি শেষ অংশের জন্য ব্যবহৃত হয়েছে। C ++ একটি গোষ্ঠীকে একটি সত্তা হিসেবে বিবেচনা করে। সুতরাং, C ++ বুকের পরপরই যে তাক বা রক্ষক খুঁজবে। নিম্নলিখিত কোডের আউটপুট মিলেছে:

গৃহস্থালিপৃ[] = 'লাইব্রেরিতে একটি বুকশেলফ রয়েছে যা প্রশংসিত।';

যদি (regex_search(পৃ,regex('বই (তাক | রক্ষক)')))

খরচ<< 'মিলে গেছে' <<endl;

বুকশেলফ এবং বুক কিপার মিলেছে না।

Icase এবং multiline regex_constants

icase

ম্যাচিং ডিফল্টরূপে কেস সংবেদনশীল। যাইহোক, এটি কেস সংবেদনশীল করা যেতে পারে। এটি অর্জনের জন্য, regex :: icase ধ্রুবক ব্যবহার করুন, যেমন নিম্নোক্ত কোড:

যদি (regex_search('প্রতিক্রিয়া',regex('খাওয়ানো',regex::icase)))

খরচ<< 'মিলে গেছে' <<endl;

আউটপুট মিলে গেছে। তাই বড় হাতের 'F' এর মতামত ছোট হাতের 'f' এর সাথে ফিডের সাথে মিলে গেছে। regex :: icase কে regex () কনস্ট্রাক্টরের দ্বিতীয় যুক্তি করা হয়েছে। এটি ছাড়া, বিবৃতি একটি মিল তৈরি করবে না।

মাল্টিলাইন

নিম্নলিখিত কোড বিবেচনা করুন:

গৃহস্থালিপৃ[] = 'লাইন 1nলাইন 2nলাইন 3 ';

যদি (regex_search(পৃ,regex('^। * $')))

খরচ<< 'মিলে গেছে' <<endl;

অন্য

খরচ<< 'মিলছে না' <<endl;

আউটপুট মিলছে না। রেজেক্স, ^।*$, টার্গেট স্ট্রিং এর শুরু থেকে শেষ পর্যন্ত মেলে। । সুতরাং, টার্গেটে নতুন লাইন অক্ষরের ( n) কারণে, কোন মিল ছিল না।

লক্ষ্য একটি মাল্টিলাইন স্ট্রিং। নতুন লাইন অক্ষরের সাথে ‘ নিচের কোডটি এটিকে ব্যাখ্যা করে:

গৃহস্থালিপৃ[] = 'লাইন 1nলাইন 2nলাইন 3 ';

যদি (regex_search(পৃ,regex('^। * $',regex::মাল্টিলাইন)))

খরচ<< 'মিলে গেছে' <<endl;

অন্য

খরচ<< 'মিলছে না' <<endl;

পুরো টার্গেট স্ট্রিং এর সাথে মিলে যাওয়া

সম্পূর্ণ টার্গেট স্ট্রিং এর সাথে মেলাতে, যার নতুন লাইন অক্ষর নেই ( n), regex_match () ফাংশন ব্যবহার করা যেতে পারে। এই ফাংশনটি regex_search () থেকে আলাদা। নিচের কোডটি এটিকে ব্যাখ্যা করে:

গৃহস্থালিপৃ[] = 'প্রথম, দ্বিতীয়, তৃতীয়';

যদি (regex_match(পৃ,regex(*।*সেকেন্ড।*')))

খরচ<< 'মিলে গেছে' <<endl;

এখানে একটা ম্যাচ আছে। যাইহোক, মনে রাখবেন যে regex পুরো টার্গেট স্ট্রিং এর সাথে মেলে, এবং টার্গেট স্ট্রিং এর কোন ' n' নেই।

The match_results অবজেক্ট

Regex_search () ফাংশন লক্ষ্য এবং regex বস্তুর মধ্যে একটি যুক্তি নিতে পারে। এই যুক্তি হল match_results অবজেক্ট। পুরো মিলে যাওয়া (অংশ) স্ট্রিং এবং সাব-স্ট্রিং মিলে গেলে এর সাথে জানা যাবে। এই বস্তু পদ্ধতি সহ একটি বিশেষ অ্যারে। Match_results অবজেক্ট টাইপ হল cmatch (স্ট্রিং লিটারেলসের জন্য)।

ম্যাচ পাওয়া

নিম্নলিখিত কোড বিবেচনা করুন:

গৃহস্থালিপৃ[] = 'যে মহিলাকে আপনি খুঁজছিলেন!';

cmatch মি;

যদি (regex_search(পৃ,মি,regex('w.m.n')))

খরচ<<মি[0] <<endl;

টার্গেট স্ট্রিংয়ে নারী শব্দটি রয়েছে। আউটপুট হল নারী ', যা রেজেক্সের সাথে মিলে যায়, w.m.n. সূচক শূন্যে, বিশেষ অ্যারে একমাত্র ম্যাচ ধরে রাখে, যা নারী।

ক্লাস বিকল্পের সাথে, লক্ষ্যমাত্রায় পাওয়া প্রথম সাব-স্ট্রিংটি বিশেষ অ্যারেতে পাঠানো হয়। নিচের কোডটি এটিকে ব্যাখ্যা করে:

cmatch মি;

যদি (regex_search('ইঁদুর, বিড়াল, বাদুড়!',মি,regex('[bcr] এ')))

খরচ<<মি[0] <<endl;

খরচ<<মি[] <<endl;

খরচ<<মি[2] <<endl;

সূচক শূন্য থেকে আউটপুট ইঁদুর। m [1] এবং m [2] খালি।

বিকল্পগুলির সাথে, লক্ষ্যমাত্রায় পাওয়া প্রথম সাব-স্ট্রিংটি বিশেষ অ্যারেতে পাঠানো হয়। নিচের কোডটি এটিকে ব্যাখ্যা করে:

যদি (regex_search('খরগোশ, ছাগল, শূকর!',মি,regex('ছাগল | খরগোশ | শূকর')))

খরচ<<মি[0] <<endl;

খরচ<<মি[] <<endl;

খরচ<<মি[2] <<endl;

সূচক শূন্য থেকে আউটপুট খরগোশ। m [1] এবং m [2] খালি।

গ্রুপিং

যখন গ্রুপগুলি জড়িত থাকে, সম্পূর্ণ প্যাটার্ন মিলে যায়, বিশেষ অ্যারের সেল শূন্যে চলে যায়। পরের সাব-স্ট্রিং পাওয়া যায় সেল 1 এ; নিম্নলিখিত উপ-স্ট্রিং, সেল 2 এ যায়; এবং তাই। নিচের কোডটি এটিকে ব্যাখ্যা করে:

যদি (regex_search('আজকের সেরা বই বিক্রেতা!',মি,regex('বই ((সেল) (লেয়ার))')))

খরচ<<মি[0] <<endl;

খরচ<<মি[] <<endl;

খরচ<<মি[2] <<endl;

খরচ<<মি[3] <<endl;

আউটপুট হল:

বই বিক্রেতা

বিক্রেতা

কোষ

পড়ুন

লক্ষ্য করুন যে গ্রুপ (বিক্রেতা) গ্রুপ (সেল) এর আগে আসে।

ম্যাচের অবস্থান

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

cmatch মি;

যদি (regex_search('আজকের সেরা বই বিক্রেতা!',মি,regex('বই ((সেল) (লেয়ার))')))

খরচ<<মি[0] << '->' <<মি।অবস্থান(0) <<endl;

খরচ<<মি[] << '->' <<মি।অবস্থান() <<endl;

খরচ<<মি[2] << '->' <<মি।অবস্থান(2) <<endl;

খরচ<<মি[3] << '->' <<মি।অবস্থান(3) <<endl;

অবস্থান সূত্রে, কোষ সূচকের সাথে যুক্তি হিসেবে ব্যবহার লক্ষ্য করুন। আউটপুট হল:

বই বিক্রেতা->5

বিক্রেতা->9

কোষ->9

পড়ুন->12

অনুসন্ধান করুন এবং প্রতিস্থাপন করুন

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

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত

নামস্থান std ব্যবহার করে;

intপ্রধান()
{
স্ট্রিং str= 'এই, আমার লোক আসে। সেখানে তোমার লোক যায়। ';
স্ট্রিং newStr=regex_replace(পৃ,regex('মানুষ'), 'নারী');
খরচ<<newStr<<endl;

প্রত্যাবর্তন 0;
}

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

এখানে আমার মহিলা আসে। সেখানে আপনার মহিলা যায়।

উপসংহার

রেগুলার এক্সপ্রেশন টার্গেট সিকোয়েন্স স্ট্রিং এর সাবস্ট্রিং এর সাথে মেলাতে প্যাটার্ন ব্যবহার করে। প্যাটার্নের মেটাচরিত্র আছে। C ++ রেগুলার এক্সপ্রেশন এর জন্য সচরাচর ব্যবহৃত ফাংশনগুলো হল: regex_search (), regex_match () এবং regex_replace ()। একটি regex ডবল উদ্ধৃতি একটি প্যাটার্ন। যাইহোক, এই ফাংশনগুলি regex অবজেক্টকে যুক্তি হিসেবে নেয় এবং শুধু regex নয়। এই ফাংশনগুলি ব্যবহার করার আগে রেজেক্সকে অবশ্যই একটি রেজেক্স অবজেক্টে পরিণত করতে হবে।