Backreference হল একটি ধারণা যা Regular Expressions (Regex)-এ ব্যবহৃত হয়, যেখানে আপনি একটি নির্দিষ্ট প্যাটার্নের অংশ পুনরায় রেফারেন্স করতে পারেন। Backreference ব্যবহারের মাধ্যমে আপনি group নামক অংশের মান পুনরায় ব্যবহার করতে পারেন যা একটি প্যাটার্নে ম্যাচ করা হয়। Java-তে রেগুলার এক্সপ্রেশন এবং backreference সাধারণত Pattern এবং Matcher ক্লাসের মাধ্যমে ব্যবহৃত হয়।
Backreference in Regular Expressions
- Group Matching:
- রেগুলার এক্সপ্রেশন ব্যবহার করার সময়, আপনি একটি প্যাটার্নে group ব্যবহার করতে পারেন, যা প্যাটার্নের কিছু অংশকে আলাদাভাবে ক্যাপচার করে রাখে। এটি সাধারণত প্যারেন্টেসিস
()দিয়ে নির্দিষ্ট করা হয়।
- রেগুলার এক্সপ্রেশন ব্যবহার করার সময়, আপনি একটি প্যাটার্নে group ব্যবহার করতে পারেন, যা প্যাটার্নের কিছু অংশকে আলাদাভাবে ক্যাপচার করে রাখে। এটি সাধারণত প্যারেন্টেসিস
- Backreference:
- যখন একটি গ্রুপের অংশ ম্যাচ হয়, তখন সেই অংশের মান
\1,\2,\3, ... (যেমন একাধিক গ্রুপের ক্ষেত্রে) রেফারেন্স করে আনা যায়।\1প্রথম গ্রুপের মান,\2দ্বিতীয় গ্রুপের মান ইত্যাদি। - এটি মূলত একটি রেফারেন্স হিসেবে কাজ করে, যেখানে আপনি একটি নির্দিষ্ট গ্রুপের মান পুনরায় ব্যবহার করতে পারেন।
- যখন একটি গ্রুপের অংশ ম্যাচ হয়, তখন সেই অংশের মান
Backreference কাজ করার উদাহরণ:
ধরা যাক, আপনার একটি স্ট্রিং আছে যেখানে আপনি একই ধরনের দুটি শব্দের একে অপরের পরে পুনরাবৃত্তি (duplicate) বা রিপিট করতে চান, এবং আপনি backreference ব্যবহার করে সেটি খুঁজে বের করতে চান।
উদাহরণ 1: এক বা একাধিক গ্রুপের মাধ্যমে backreference
import java.util.regex.*;
public class BackreferenceExample {
public static void main(String[] args) {
// Regular expression with backreference
String regex = "(\\b\\w+\\b)\\s+\\1"; // This matches two identical words in a row
String input = "hello hello world java java world";
// Compile regex pattern
Pattern pattern = Pattern.compile(regex);
// Create a matcher
Matcher matcher = pattern.matcher(input);
// Find matching words
while (matcher.find()) {
System.out.println("Matched: " + matcher.group());
}
}
}
কোড বিশ্লেষণ:
- Regular Expression:
(\\b\\w+\\b)\\s+\\1(\\b\\w+\\b)হল একটি গ্রুপ যা একটি শব্দকে মেচ করে (যেমন "hello", "world", "java")।\\s+হলো স্পেস বা হোয়াইটস্পেস, যা দুইটি শব্দের মধ্যে থাকে।\\1backreference হিসেবে ব্যবহৃত হচ্ছে, যা প্রথম গ্রুপের শব্দটি পুনরায় ম্যাচ করবে।
- Pattern.matcher(input): এটি ইনপুট স্ট্রিংয়ের সাথে প্যাটার্ন মেচ করে এবং যদি দুটি সমান শব্দ একে অপরের পর আসে তবে তা ম্যাচ হবে।
- matcher.find(): এটি প্রতিটি মেলা অংশ খুঁজে বের করে এবং মেলানো অংশের মান প্রিন্ট করে।
আউটপুট:
Matched: hello hello
Matched: java java
এখানে, backreference \1 প্রথম গ্রুপের শব্দ ("hello" এবং "java") পুনরায় মেলানো হয় এবং দুটি শব্দ একে অপরের পর পুনরায় উপস্থিত হয়।
Backreference in Replace All (Replacer) Example:
backreference কেবলমাত্র মাচিং নয়, বরং স্ট্রিং পরিবর্তন (replacement) করার জন্যও ব্যবহার করা যায়।
import java.util.regex.*;
public class ReplaceBackreferenceExample {
public static void main(String[] args) {
String regex = "(\\b\\w+\\b)\\s+\\1"; // Matches duplicate words
String input = "hello hello world java java world";
// Replace using backreference
String replaced = input.replaceAll(regex, "$1");
System.out.println("Replaced String: " + replaced);
}
}
কোড বিশ্লেষণ:
replaceAll(regex, "$1"): এটিregexপ্যাটার্ন অনুযায়ী স্ট্রিংয়ের সমস্ত মেলানো অংশকে$1দিয়ে প্রতিস্থাপন করে।$1এখানে প্রথম গ্রুপের মানকে রিপ্লেস করবে এবং রিপিটেড শব্দ সরিয়ে ফেলবে।
আউটপুট:
Replaced String: hello world java world
এখানে, backreference $1 প্রথম গ্রুপের মান (যেমন "hello" এবং "java") নিয়ে রিপিটেড অংশ মুছে ফেলা হয়েছে।
Backreference এর অন্যান্য ব্যবহার:
- Matching Palindromes:
- আপনি backreference ব্যবহার করে প্যালিনড্রোম (palindromes) চেক করতে পারেন, যেখানে একটি শব্দ বা প্যাটার্ন উল্টো থেকে পড়লেও একই থাকে।
- Pattern Grouping and Matching:
- Grouping এবং matching এর ক্ষেত্রে backreference একটি শক্তিশালী টুল। আপনি প্রথম গ্রুপের সাথে ম্যাচ করার জন্য পরবর্তী অংশে একই প্যাটার্ন চেক করতে পারেন।
- String Validation:
- আপনি backreference ব্যবহার করে স্ট্রিং ভ্যালিডেশন করতে পারেন, যেমন একই ধরনের ডেটা প্যাটার্ন পুনরায় আসা এবং নিশ্চিত করা।
Backreference এর সিক্যুয়েন্স:
\1,\2,\3: এগুলো রিপ্রেজেন্ট করে প্রথম, দ্বিতীয়, তৃতীয় গ্রুপের ম্যাচ। প্রতিটি গ্রুপ একটি নির্দিষ্ট অংশকে নির্দেশ করে এবং এই অংশের মান পরবর্তী প্যাটার্নে পুনরায় ব্যবহৃত হয়।
সারাংশ:
Backreference একটি রেগুলার এক্সপ্রেশন কৌশল, যা আপনাকে একটি গ্রুপের মান পরে প্যাটার্নে পুনরায় ব্যবহার করতে দেয়। এটি বিভিন্ন প্রয়োজনে যেমন স্ট্রিং পরিবর্তন, ডেটা ভ্যালিডেশন, প্যাটার্ন মাচিং ইত্যাদিতে ব্যবহৃত হয়। Java-তে Pattern এবং Matcher ক্লাস ব্যবহার করে আপনি সহজেই backreference এর মাধ্যমে প্যাটার্নের অংশ পুনরায় ব্যবহার করতে পারেন এবং স্ট্রিং পরিবর্তন বা ম্যানিপুলেট করতে পারেন।
Read more