একটি রেগেক্স কী
একটি রেগুলার এক্সপ্রেশন হলো লেখা খোঁজার একটি ছক। cat “cat” অক্ষরগুলো যেকোনো জায়গায় খুঁজে পায়, “concatenate”-র ভেতরেও। বিশেষ অক্ষর ছকটিকে নির্দিষ্ট অক্ষরের বদলে লেখার ধরন বর্ণনা করতে দেয়।
গাঁথনিগুলো
. | লাইন ভাঙা ছাড়া যেকোনো একটি অক্ষর |
\d, \w, \s | একটি অঙ্ক; একটি অক্ষর, অঙ্ক কিংবা আন্ডারস্কোর; একটি ফাঁক, ট্যাব কিংবা লাইন ভাঙা |
[aeiou], [^0-9] | এই অক্ষরগুলোর যেকোনো একটি; অঙ্ক নয় এমন যেকোনো অক্ষর |
*, +, ? | আগে যা আছে তার শূন্য বা বেশি, এক বা বেশি, শূন্য বা এক |
{3}, {2,4} | ঠিক 3; 2 আর 4-র মধ্যে |
^, $ | লেখার শুরু আর শেষ (কিংবা m নিশান দিলে প্রতিটি লাইনের) |
\b | একটি শব্দের সীমানা: \bcat\b “cat” খুঁজে পায় কিন্তু “concatenate” নয় |
( ), | | একটি গুচ্ছ, যা একটি বদলে দেওয়ায় আবার ব্যবহার করা যায়; এটি কিংবা সেটি |
একটি বিশেষ অক্ষরকেই মেলাতে তার সামনে একটি ব্যাকস্ল্যাশ বসান: \. একটি দাঁড়ি মেলায়।
উদাহরণ
\d{3}-\d{4}555-0123-র মতো লেখা নম্বর খুঁজে পায়।- g আর m নিশান দিয়ে
^[ \t]+|[ \t]+$প্রতিটি লাইনের শুরু আর শেষের ফাঁক আর ট্যাব খুঁজে পায়, যা কিছু না দিয়ে বদলে দেওয়ার জন্য তৈরি। (\d{4})-(\d{2})-(\d{2})-কে$3/$2/$1দিয়ে বদলে দিলে 2024-09-27 দাঁড়ায় 27/09/2024।
নিশান, আর লোভী মেলানো
g নিশান প্রথমটির বদলে প্রতিটি মিলই খুঁজে পায়, i বড়-ছোট হাতের অক্ষর ধরে না আর m ^ আর $-কে প্রতি লাইনে কাজ করায়। পরিমাণকগুলো লোভী: <.*> একটি লাইনে প্রথম < থেকে শেষ > পর্যন্ত মেলায়। যত আগে সম্ভব থামাতে ? জুড়ে দিন: <.*?>।
রেগেক্স পরখ-এ সঙ্গে সঙ্গে দাগিয়ে দেওয়া নিয়ে ছক দেখে নিন, যা জাভাস্ক্রিপ্টের গড়নই ব্যবহার করে, আর খুঁজে বদলে দিন-এ নিজের লেখায় সেগুলো কাজে লাগান।
রোজকার কাজের ছক
| যা খুঁজতে | ছক |
|---|---|
| খালি লাইন | m নিশান দিয়ে ^\s*$ |
| পুনরাবৃত্ত ফাঁক | {2,}, যা একটি ফাঁক দিয়ে বদলানো |
| বন্ধনীর ভেতরে যা-ই থাকে | \([^)]*\) |
| একটি দাম | \$\d+(\.\d{2})? |
| একটি HTML ট্যাগ | <[^>]+> |
| একটি CSV লাইনের শেষ ঘর | m নিশান দিয়ে [^,]+$ |
গুচ্ছ দিয়ে সাজিয়ে নেওয়া
(\w+), (\w+) খুঁজে $2 $1 দিয়ে বদলে দিলে একটি গোটা তালিকা জুড়ে “Smith, John” হয়ে যায় “John Smith”। প্রতিটি বন্ধনীর জোড়া বাঁ দিক থেকে নম্বর পায়, আর $0 হলো গোটা মিলটিই।
চেনা ভুল
- একটি ফুটকি মানে যেকোনো কিছু — তা ভুলে যাওয়া।
file.txt“fileXtxt”-ও মেলায়। লিখুনfile\.txt। - লোভী পরিমাণক বেশি নিয়ে নেয়। দুটি উদ্ধৃতির সুতোওয়ালা একটি লাইনে
".*"প্রথম উদ্ধৃতি থেকে শেষটি পর্যন্ত মেলায়।".*?"নিন। - প্রতিটি সরঞ্জামই একই গড়ন ব্যবহার করে ধরে নেওয়া। পিছনে-তাকানো, নাম দেওয়া গুচ্ছ আর অক্ষরের শ্রেণির ভেতরে
\dজাভাস্ক্রিপ্ট, পাইথন, grep আর আপনার সম্পাদকে আলাদা। - একটির ভেতরে আরেকটি বসা গড়ন পড়তে চাওয়া। HTML, JSON আর কোডে এমন বাসা থাকে যা একটি রেগেক্স অনুসরণ করতে পারে না। একটি পার্সার নিন, আর রেগেক্স সমান লেখার জন্যই রাখুন।
- একটি ছক আটকে যায়।
(a+)+b-র মতো একটির ভেতরে আরেকটি বসা পরিমাণক একটি লম্বা না-মেলা লাইনে সূচকীয় সময় নিতে পারে। ছকটি সরল করুন।