আপনার রেজেক্স স্বাদগুলি জানুন
এমন একটি আশ্চর্যজনক পরিমাণ লোক রয়েছে যারা মনে করেন যে নিয়মিত প্রকাশগুলি মূলত ভাষা অজ্ঞায়নের। তবে স্বাদগুলির মধ্যে আসলে বেশ উল্লেখযোগ্য পার্থক্য রয়েছে এবং বিশেষত কোড গল্ফের জন্য তাদের কয়েকটি এবং তাদের আকর্ষণীয় বৈশিষ্ট্যগুলি জানা ভাল, যাতে আপনি প্রতিটি কাজের জন্য সেরাটি বেছে নিতে পারেন। এখানে বেশ কয়েকটি গুরুত্বপূর্ণ স্বাদ এবং অন্যান্যগুলি থেকে আলাদা করে রাখার বিষয়ে একটি সংক্ষিপ্ত বিবরণ view (এই তালিকাটি সত্যিই সম্পূর্ণ হতে পারে না, তবে আমি সত্যিই উদ্বেগজনক কিছু মিস করেছি কিনা তা আমাকে জানান))
পার্ল এবং পিসিআরই
আমি এগুলিকে একটি পাত্রের মধ্যে ফেলে দিচ্ছি, কারণ আমি পার্ল গন্ধের সাথে খুব বেশি পরিচিত নই এবং তারা বেশিরভাগ সমতুল্য (পিসিআরই পার্ল-সামঞ্জস্যপূর্ণ নিয়মিত এক্সপ্রেশনগুলির পরে)। পার্ল গন্ধের প্রধান সুবিধা হ'ল আপনি প্রকৃতপক্ষে রেজেক্স এবং বিকল্পের ভিতরে থেকে পার্ল কোডটি কল করতে পারেন।
- পুনরাবৃত্তি / subroutines । গল্ফিংয়ের জন্য সম্ভবত সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্য (যা কেবল কয়েকটি স্বাদে বিদ্যমান)।
- শর্তাধীন নিদর্শন
(?(group)yes|no)
।
- সমর্থন দিয়ে প্রতিস্থাপন স্ট্রিং মামলার পরিবর্তন
\l
, \u
, \L
এবং \U
।
- পিসিআরআই লুকের পিছনে পরিবর্তনের অনুমতি দেয়, যেখানে প্রতিটি বিকল্পের আলাদা (তবে স্থির) দৈর্ঘ্য থাকতে পারে। (পার্ল সহ বেশিরভাগ স্বাদের সামগ্রিক নির্দিষ্ট দৈর্ঘ্যের জন্য লুকবিহাইন্ডগুলি প্রয়োজন))
\G
আগের ম্যাচ শেষে একটি ম্যাচ অ্যাঙ্কর করতে।
\K
ম্যাচের শুরুটি পুনরায় সেট করতে
- পিসিআরই ইউনিকোড অক্ষর বৈশিষ্ট্য এবং স্ক্রিপ্ট উভয় সমর্থন করে ।
\Q...\E
অক্ষর দীর্ঘ রান চালাতে। আপনি যখন অনেকগুলি মেটা-অক্ষরযুক্ত স্ট্রিংয়ের সাথে মেলে চেষ্টা করছেন তখন দরকারী।
.NET
এটি খুব শক্তিশালী স্বাদ, খুব কম কমতি রয়েছে com
গল্ফিংয়ের ক্ষেত্রে একটি গুরুত্বপূর্ণ অসুবিধা হ'ল এটি অন্য কিছু স্বাদের মতো অধিক পরিমাণে কোয়ান্টিফায়ার সমর্থন করে না। পরিবর্তে .?+
আপনাকে লিখতে হবে (?>.?)
।
জাভা
- ত্রুটির কারণে (পরিশিষ্ট দেখুন) জাভা সীমিত প্রকারের চলক-দৈর্ঘ্যের বর্ণনক্ষেত্রের সমর্থন করে: আপনি স্ট্রিংয়ের শুরু পর্যন্ত সমস্ত পথের পিছনে নজর
.*
দিতে পারেন যেখানে আপনি এখন থেকে লুপহ্যাড শুরু করতে পারেন, এর মতো (?<=(?=lookahead).*)
।
- ইউনিয়ন এবং চরিত্র শ্রেণীর ছেদ সমর্থন করে।
- "ইউনিকোড স্ক্রিপ্টস, ব্লকস, বিভাগ এবং বাইনারি বৈশিষ্ট্যগুলির" জন্য অক্ষর শ্রেণীর সাথে ইউনিকোডের সর্বাধিক বিস্তৃত সমর্থন রয়েছে ।
\Q...\E
পার্ল / পিসিআরই হিসাবে
চুনি
সাম্প্রতিক সংস্করণগুলিতে, এই স্বাদটি পিসিআরই হিসাবে একইভাবে শক্তিশালী, সাব্রোটিন কলগুলির সমর্থন সহ। জাভা এর মতো এটিও ইউনিয়ন এবং চরিত্র শ্রেণির ছেদকে সমর্থন করে। একটি বিশেষ বৈশিষ্ট্য হেক্স ডিজিটের জন্য অন্তর্নির্মিত চরিত্র শ্রেণি: \h
(এবং অবহেলিত \H
)।
গল্ফিংয়ের ক্ষেত্রে সবচেয়ে দরকারী বৈশিষ্ট্যটি হ'ল রুবি কীভাবে কোয়ান্টিফায়ারগুলিকে পরিচালনা করে। সর্বাধিক উল্লেখযোগ্যভাবে, প্রথম বন্ধনী ছাড়াই বাসা বাঁধাই সম্ভব। .{5,7}+
কাজ করে এবং তাই করে .{3}?
। এছাড়াও অন্যান্য বেশিরভাগ স্বাদের বিপরীতে, কোয়ান্টিফায়ারের নীচের অংশে যদি 0
এটি বাদ দেওয়া যায় তবে এটি .{,5}
সমান .{0,5}
।
সাবরুটাইনগুলি হিসাবে, পিসিআরই সাব্রুটাইনস এবং রুবির সাবরুটাইনগুলির মধ্যে প্রধান পার্থক্যটি হ'ল রুবির সিনট্যাক্সটি বাইট লম্বা (?n)
বনাম \g<n>
, তবে রুবির সাবরুটাইনগুলি ক্যাপচারের জন্য ব্যবহার করা যেতে পারে, যেখানে পিসিআরই সাব্রোটাইন শেষ হওয়ার পরে ক্যাপচারগুলি পুনরায় সেট করে।
অবশেষে, রুবির অন্যান্য স্বাদের তুলনায় লাইন-সম্পর্কিত সংশোধকগুলির জন্য বিভিন্ন শব্দার্থক শব্দ রয়েছে। সাধারণত m
অন্যান্য স্বাদে যে সংশোধকটি ডাকা হয় তা রুবিতে সর্বদা চালু থাকে। সুতরাং ^
এবং $
সর্বদা একটি স্ট্রিংয়ের শুরু এবং শেষের সাথে নয় তবে একটি লাইনের শুরু এবং শেষের সাথে মেলে । আপনার যদি এই আচরণের প্রয়োজন হয় তবে এটি আপনাকে একটি বাইট সংরক্ষণ করতে পারে, তবে আপনি যদি না করেন তবে আপনার অতিরিক্ত বাইট খরচ হবে, কারণ আপনাকে যথাক্রমে প্রতিস্থাপন করতে হবে ^
এবং $
সহ \A
এবং করতে হবে \z
। এটির পরিবর্তে , পরিবর্তককে সাধারণত বলা হয় s
(যা .
ম্যাচ লাইনফিডগুলি তৈরি করে) m
পরিবর্তে রুবিতে ডাকা হয়। এটি বাইট গণনাগুলিকে প্রভাবিত করে না, তবে বিভ্রান্তি এড়াতে মনে রাখা উচিত।
পাইথন
পাইথনের একটি শক্ত স্বাদ রয়েছে তবে আমি বিশেষভাবে দরকারী বৈশিষ্ট্যগুলি সম্পর্কে অবগত নই যা আপনি অন্য কোথাও পাবেন না।
যাইহোক , একটি বিকল্প গন্ধ আছে যা re
কিছু সময়ে মডিউলটি প্রতিস্থাপনের উদ্দেশ্যে তৈরি হয়েছিল এবং এতে প্রচুর আকর্ষণীয় বৈশিষ্ট্য রয়েছে। পুনরাবৃত্তি, ভেরিয়েবল-দৈর্ঘ্যের লুকবিহিনগুলি এবং চরিত্রের শ্রেণীর সংমিশ্রণ অপারেটরদের জন্য সমর্থন যোগ করার পাশাপাশি এটিতেও মজাদার মিলের অনন্য বৈশিষ্ট্য রয়েছে । সংক্ষেপে আপনি বেশ কয়েকটি ত্রুটি (সন্নিবেশ, মুছে ফেলা, বিকল্প) নির্দিষ্ট করতে পারবেন যা অনুমোদিত, এবং ইঞ্জিন আপনাকে আনুমানিক মিলও দেবে।
এর নাম ECMAScript
ECMAScript স্বাদটি খুব সীমাবদ্ধ, এবং তাই গল্ফ করার জন্য খুব কমই খুব কার্যকর। এটি কেবল যেটির জন্য যাচ্ছে তা হ'ল নিরক্ষর শূন্য চরিত্রের শ্রেণিটি[^]
কোনও চরিত্রের সাথে মেলে ধরার পাশাপাশি শর্তহীনভাবে ব্যর্থ হওয়া খালি চরিত্রের শ্রেণি []
(সাধারণের বিপরীতে (?!)
)। দুর্ভাগ্যক্রমে, স্বাদে এমন কোনও বৈশিষ্ট্য নেই যা আধুনিক সমস্যার জন্য আধুনিককে দরকারী করে তোলে।
অ্যাপ্লিকেশন Lua
লুয়ার নিজস্ব মোটামুটি অনন্য স্বাদ রয়েছে, যা বেশ সীমাবদ্ধ (যেমন আপনি গোষ্ঠীগুলির পরিমাণও নির্ধারণ করতে পারবেন না) তবে এটি বেশ কয়েকটি দরকারী এবং আকর্ষণীয় বৈশিষ্ট্য নিয়ে আসে।
- বিরামচিহ্ন, উচ্চ / নিম্নের অক্ষর এবং হেক্স অঙ্ক সহ অন্তর্নির্মিত অক্ষর শ্রেণীর জন্য এটি সংখ্যক শর্টহ্যান্ড পেয়েছে ।
- সঙ্গে
%b
এটি একটি খুব কম্প্যাক্ট সিনট্যাক্স সমর্থন সুষম স্ট্রিং মেলে। উদাহরণস্বরূপ %b()
একটি (
এবং তারপরে সবকিছু মিলে যায় )
(সঠিকভাবে অভ্যন্তরীণ ম্যাচিং জোড়াগুলি এড়িয়ে যাওয়া)। (
এবং )
এখানে যে কোনও দুটি চরিত্র হতে পারে।
সাহায্য
বুস্টের রেগেক্স গন্ধটি মূলত পার্লের। যাইহোক, কেস পরিবর্তন এবং শর্তসাপেক্ষ সহ রেজেক্সে প্রতিস্থাপনের জন্য এটিতে বেশ কয়েকটি নতুন নতুন বৈশিষ্ট্য রয়েছে । পরেরটি বুস্টের কাছে যতটা আমি সচেতন ততই অনন্য।