রেগুলার এক্সপ্রেশন এমন একটি বিষয় যা প্রোগ্রামাররা, এমনকি অভিজ্ঞরাও প্রায়শই পরবর্তী সময়ের জন্য স্থগিত করে। কিন্তু শীঘ্রই বা পরে, বেশিরভাগ জাভা বিকাশকারীদের পাঠ্য তথ্য প্রক্রিয়া করতে হবে। প্রায়শই, এর অর্থ পাঠ্য অনুসন্ধান এবং সম্পাদনা করা। রেগুলার এক্সপ্রেশন ছাড়া, কার্যকর এবং কমপ্যাক্ট টেক্সট-প্রসেসিং কোডটি কল্পনা করা যায় না। তাই দেরি করা বন্ধ করুন, এখনই রেগুলার এক্সপ্রেশন নিয়ে কাজ করা যাক। এটা এত কঠিন না. জাভাতে রেগুলার এক্সপ্রেশন - ১

একটি নিয়মিত অভিব্যক্তি (regex) কি?

আসলে, একটি রেগুলার এক্সপ্রেশন হল টেক্সটে একটি স্ট্রিং খোঁজার একটি প্যাটার্ন। জাভাতে, এই প্যাটার্নের মূল উপস্থাপনা সর্বদা একটি স্ট্রিং, অর্থাৎ ক্লাসের একটি বস্তু String। যাইহোক, এটি এমন কোনো স্ট্রিং নয় যা একটি রেগুলার এক্সপ্রেশনে কম্পাইল করা যেতে পারে - শুধুমাত্র স্ট্রিং যা রেগুলার এক্সপ্রেশন তৈরি করার নিয়ম মেনে চলে। সিনট্যাক্স ভাষা স্পেসিফিকেশন সংজ্ঞায়িত করা হয়. রেগুলার এক্সপ্রেশনগুলি অক্ষর এবং সংখ্যার পাশাপাশি মেটাক্যারেক্টার ব্যবহার করে লেখা হয়, যা রেগুলার এক্সপ্রেশন সিনট্যাক্সে বিশেষ অর্থ বহন করে। উদাহরণ স্বরূপ:

String regex = "java"; // The pattern is "java";
String regex = "\\d{3}"; // The pattern is three digits;

জাভাতে নিয়মিত এক্সপ্রেশন তৈরি করা

জাভাতে একটি রেগুলার এক্সপ্রেশন তৈরি করার জন্য দুটি সহজ পদক্ষেপ জড়িত:
  1. এটিকে একটি স্ট্রিং হিসাবে লিখুন যা রেগুলার এক্সপ্রেশন সিনট্যাক্স মেনে চলে;
  2. একটি রেগুলার এক্সপ্রেশনে স্ট্রিং কম্পাইল করুন;
যেকোনো জাভা প্রোগ্রামে, আমরা একটি Patternঅবজেক্ট তৈরি করে রেগুলার এক্সপ্রেশনের সাথে কাজ শুরু করি। এটি করার জন্য, আমাদের ক্লাসের দুটি স্ট্যাটিক পদ্ধতির একটিতে কল করতে হবে: compile. প্রথম পদ্ধতিটি একটি আর্গুমেন্ট নেয় - একটি স্ট্রিং আক্ষরিক যা রেগুলার এক্সপ্রেশন ধারণ করে, যখন দ্বিতীয়টি একটি অতিরিক্ত আর্গুমেন্ট নেয় যা প্যাটার্ন-মিলিং সেটিংস নির্ধারণ করে:

public static Pattern compile (String literal)
public static Pattern compile (String literal, int flags)
প্যারামিটারের সম্ভাব্য মানের তালিকাটি ক্লাসে flagsসংজ্ঞায়িত করা হয়েছে Patternএবং স্ট্যাটিক ক্লাস ভেরিয়েবল হিসাবে আমাদের কাছে উপলব্ধ। উদাহরণ স্বরূপ:

Pattern pattern = Pattern.compile("java", Pattern.CASE_INSENSITIVE); // Pattern-matching will be case insensitive.
মূলত, Patternক্লাস হল রেগুলার এক্সপ্রেশনের কনস্ট্রাক্টর। হুডের নীচে, পদ্ধতিটি একটি সংকলিত উপস্থাপনা তৈরি করতে ক্লাসের ব্যক্তিগত কনস্ট্রাক্টরকে compileকল করে । Patternঅপরিবর্তনীয় বস্তু তৈরি করার জন্য এই বস্তু-সৃষ্টি প্রক্রিয়াটি এইভাবে প্রয়োগ করা হয়। যখন একটি রেগুলার এক্সপ্রেশন তৈরি করা হয়, তখন তার সিনট্যাক্স চেক করা হয়। যদি স্ট্রিংটিতে ত্রুটি থাকে, তাহলে একটি PatternSyntaxExceptionতৈরি হয়।

রেগুলার এক্সপ্রেশন সিনট্যাক্স

রেগুলার এক্সপ্রেশন সিনট্যাক্স <([{\^-=$!|]})?*+.>অক্ষরগুলির উপর নির্ভর করে, যা অক্ষরের সাথে একত্রিত হতে পারে। তাদের ভূমিকার উপর নির্ভর করে, তাদের কয়েকটি দলে বিভক্ত করা যেতে পারে:
1. লাইন বা পাঠ্যের সীমানা মেলানোর জন্য মেটা অক্ষর
মেটাচ্যারেক্টার বর্ণনা
^ একটি লাইনের শুরু
$ একটি লাইনের শেষ
\b শব্দের সীমানা
\B অ-শব্দ সীমানা
\A ইনপুট শুরু
\G আগের ম্যাচের শেষ
\Z ইনপুট শেষ
\z ইনপুট শেষ
2. পূর্বনির্ধারিত অক্ষর ক্লাসের সাথে মেলানোর জন্য মেটা অক্ষর
মেটাচ্যারেক্টার বর্ণনা
\d অঙ্ক
\D অ-সংখ্যা
\s হোয়াইটস্পেস অক্ষর
\S নন-হোয়াইটস্পেস অক্ষর
\w আলফানিউমেরিক অক্ষর বা আন্ডারস্কোর
\W অক্ষর, সংখ্যা এবং আন্ডারস্কোর ছাড়া যেকোনো অক্ষর
. কোন চরিত্র
3. নিয়ন্ত্রণ অক্ষর মেলানোর জন্য মেটা অক্ষর
মেটাচ্যারেক্টার বর্ণনা
\t ট্যাব অক্ষর
\n নতুন লাইন চরিত্র
\r গাড়ি ফেরত
\f লাইনফিড চরিত্র
\u0085 পরবর্তী লাইনের অক্ষর
\u2028 লাইন বিভাজক
\u2029 অনুচ্ছেদ বিভাজক
4. ক্যারেক্টার ক্লাসের জন্য মেটাক্যারেক্টার
মেটাচ্যারেক্টার বর্ণনা
[abc] তালিকাভুক্ত কোনো অক্ষর (a, b, অথবা c)
[^abc] তালিকাভুক্ত ব্যতীত অন্য কোন অক্ষর (a, b, বা c নয়)
[a-zA-Z] মার্জ করা রেঞ্জ (a থেকে z পর্যন্ত ল্যাটিন অক্ষর, কেস সংবেদনশীল)
[বিজ্ঞাপন[এমপি]] অক্ষরের মিলন (a থেকে d এবং m থেকে p)
[এজেএজেন্ড ও [ডিএফ]] অক্ষরের ছেদ (d, e, f)
[az&&[^bc]] অক্ষরের বিয়োগ (a, dz)
5. অক্ষরের সংখ্যা নির্দেশ করার জন্য মেটা অক্ষর (পরিমাণকারী)। একটি কোয়ান্টিফায়ার সর্বদা একটি অক্ষর বা অক্ষর গোষ্ঠীর আগে থাকে।
মেটাচ্যারেক্টার বর্ণনা
? এক বা কোনটি
* শূন্য বা তার বেশি বার
+ এক বা একাধিক বার
{n} n বার
{n,} n বা তার বেশি বার
{n,m} কমপক্ষে n বার এবং m বারের বেশি নয়

লোভী কোয়ান্টিফায়ার

কোয়ান্টিফায়ার সম্পর্কে আপনার একটি জিনিস জানা উচিত যে তারা তিনটি ভিন্ন জাতের মধ্যে আসে: লোভী, অধিকারী এবং অনিচ্ছুক। +আপনি কোয়ান্টিফায়ারের পরে একটি " " অক্ষর যোগ করে একটি কোয়ান্টিফায়ারকে অধিকারী করে তোলেন । ?আপনি " " যোগ করে এটিকে অনিচ্ছুক করে তোলেন ৷ উদাহরণ স্বরূপ:

"A.+a" // greedy
"A.++a" // possessive
"A.+?a" // reluctant
বিভিন্ন ধরণের কোয়ান্টিফায়ারগুলি কীভাবে কাজ করে তা বোঝার জন্য আসুন এই প্যাটার্নটি ব্যবহার করার চেষ্টা করি। ডিফল্টরূপে, কোয়ান্টিফায়াররা লোভী। এর মানে হল যে তারা স্ট্রিংয়ের দীর্ঘতম ম্যাচটি সন্ধান করে। আমরা যদি নিম্নলিখিত কোড চালাই:

public static void main(String[] args) {
    String text = "Fred Anna Alexander";
    Pattern pattern = Pattern.compile("A.+a");
    Matcher matcher = pattern.matcher(text);
    while (matcher.find()) {
        System.out.println(text.substring(matcher.start(), matcher.end()));
    }
}
আমরা এই আউটপুট পাই:

Anna Alexa
রেগুলার এক্সপ্রেশন " A.+a" এর জন্য, প্যাটার্ন-ম্যাচিং নিম্নরূপ সঞ্চালিত হয়:
  1. নির্দিষ্ট প্যাটার্নের প্রথম অক্ষরটি হল ল্যাটিন অক্ষর AMatcherসূচক শূন্য থেকে শুরু করে পাঠ্যের প্রতিটি অক্ষরের সাথে এটি তুলনা করে। অক্ষরটি Fআমাদের পাঠ্যের সূচী শূন্যে রয়েছে, তাই Matcherঅক্ষরের মাধ্যমে পুনরাবৃত্তি হয় যতক্ষণ না এটি প্যাটার্নের সাথে মেলে। আমাদের উদাহরণে, এই অক্ষরটি সূচক 5 এ পাওয়া যায়।

    জাভাতে রেগুলার এক্সপ্রেশন - 2
  2. প্যাটার্নের প্রথম অক্ষরের সাথে একটি মিল পাওয়া গেলে, Matcherতার দ্বিতীয় অক্ষরের সাথে একটি মিল খোঁজে। আমাদের ক্ষেত্রে, এটি হল " ." অক্ষর, যা যেকোনো অক্ষরকে বোঝায়।

    জাভাতে রেগুলার এক্সপ্রেশন - 3

    চরিত্রটি nষষ্ঠ অবস্থানে রয়েছে। এটি অবশ্যই "যেকোন চরিত্রের" জন্য একটি ম্যাচ হিসাবে যোগ্যতা অর্জন করে।

  3. Matcherপ্যাটার্নের পরবর্তী অক্ষর পরীক্ষা করতে এগিয়ে যান। আমাদের প্যাটার্নে, এটি কোয়ান্টিফায়ারে অন্তর্ভুক্ত করা হয়েছে যা পূর্ববর্তী অক্ষরের ক্ষেত্রে প্রযোজ্য: " .+"। কারণ আমাদের প্যাটার্নে "যেকোনো অক্ষর" এর পুনরাবৃত্তির সংখ্যা এক বা একাধিক বার, Matcherবারবার স্ট্রিং থেকে পরবর্তী অক্ষরটি নেয় এবং যতক্ষণ না এটি "যেকোন অক্ষর" এর সাথে মেলে ততক্ষণ প্যাটার্নের বিপরীতে এটি পরীক্ষা করে। আমাদের উদাহরণে — স্ট্রিং শেষ হওয়া পর্যন্ত (সূচী 7 থেকে সূচক 18)।

    জাভাতে রেগুলার এক্সপ্রেশন - 4

    মূলত, Matcherস্ট্রিংটি শেষ পর্যন্ত গববল করে — এটিই "লোভী" দ্বারা বোঝানো হয়েছে।

  4. ম্যাচার পাঠ্যের শেষে পৌঁছে এবং A.+প্যাটার্নের " " অংশের জন্য পরীক্ষা শেষ করার পরে, এটি প্যাটার্নের বাকি অংশের জন্য পরীক্ষা করা শুরু করে a: সামনে আর কোন পাঠ্য নেই, তাই শেষ অক্ষর থেকে শুরু করে চেকটি "ব্যাক অফ" করে এগিয়ে যায়:

    জাভাতে রেগুলার এক্সপ্রেশন - 5
  5. Matcher.+প্যাটার্নের " " অংশে পুনরাবৃত্তির সংখ্যা "মনে রাখে" । এই মুহুর্তে, এটি পুনরাবৃত্তির সংখ্যা এক দ্বারা হ্রাস করে এবং একটি মিল না পাওয়া পর্যন্ত পাঠ্যের বিপরীতে বড় প্যাটার্নটি পরীক্ষা করে:

    জাভাতে রেগুলার এক্সপ্রেশন - 6

অধিকারী কোয়ান্টিফায়ার

পসেসিভ কোয়ান্টিফায়াররা অনেকটা লোভীদের মতো। পার্থক্য হল যখন স্ট্রিং এর শেষ পর্যন্ত টেক্সট ক্যাপচার করা হয়, "ব্যাকিং অফ" করার সময় কোন প্যাটার্ন-ম্যাচিং নেই। অন্য কথায়, প্রথম তিনটি পর্যায় লোভী কোয়ান্টিফায়ারের মতোই। পুরো স্ট্রিংটি ক্যাপচার করার পরে, ম্যাচার বাকি প্যাটার্নটি যা বিবেচনা করছে তাতে যোগ করে এবং ক্যাপচার করা স্ট্রিংটির সাথে তুলনা করে। আমাদের উদাহরণে, রেগুলার এক্সপ্রেশন " A.++a" ব্যবহার করে, মূল পদ্ধতিটি কোন মিল খুঁজে পায় না। জাভাতে রেগুলার এক্সপ্রেশন - 7

অনিচ্ছুক quantifiers

  1. এই কোয়ান্টিফায়ারগুলির জন্য, লোভী বৈচিত্র্যের মতো, কোডটি প্যাটার্নের প্রথম অক্ষরের উপর ভিত্তি করে একটি মিলের সন্ধান করে:

    জাভাতে রেগুলার এক্সপ্রেশন - 8
  2. তারপর এটি প্যাটার্নের পরবর্তী অক্ষর (যেকোন অক্ষর) এর সাথে একটি মিল খোঁজে:

    জাভাতে রেগুলার এক্সপ্রেশন - 9
  3. লোভী প্যাটার্ন-ম্যাচিংয়ের বিপরীতে, সংক্ষিপ্ততম ম্যাচটি অনিচ্ছুক প্যাটার্ন-ম্যাচিংয়ের জন্য অনুসন্ধান করা হয়। এর অর্থ হল প্যাটার্নের দ্বিতীয় অক্ষরের সাথে একটি মিল খুঁজে পাওয়ার পরে (একটি সময়কাল, যা পাঠ্যের অবস্থান 6-এর অক্ষরের সাথে মিলে যায়, পাঠ্যটি প্যাটার্নের বাকি অংশের সাথে মেলে কিনা তা পরীক্ষা করে — " " Matcherঅক্ষরটিa

    জাভাতে রেগুলার এক্সপ্রেশন - 10
  4. পাঠ্যটি প্যাটার্নের সাথে মেলে না (অর্থাৎ এটি nসূচী 7 এ " " অক্ষর ধারণ করে), তাই Matcherআরও একটি "যেকোন অক্ষর" যোগ করে, কারণ পরিমাপক এক বা একাধিক নির্দেশ করে। তারপরে এটি আবার 5 থেকে 8 পজিশনে পাঠ্যের সাথে প্যাটার্নের তুলনা করে:

    জাভাতে রেগুলার এক্সপ্রেশন - 11
  5. আমাদের ক্ষেত্রে, একটি মিল পাওয়া যায়, কিন্তু আমরা এখনও পাঠ্যের শেষ পর্যন্ত পৌঁছাতে পারিনি। অতএব, প্যাটার্ন-ম্যাচিং পজিশন 9 থেকে পুনঃসূচনা হয়, অর্থাৎ প্যাটার্নের প্রথম অক্ষরটি অনুরূপ অ্যালগরিদম ব্যবহার করার জন্য দেখা হয় এবং এটি পাঠ্যের শেষ পর্যন্ত পুনরাবৃত্তি হয়।

    জাভাতে রেগুলার এক্সপ্রেশন - 12
তদনুসারে, mainপ্যাটার্ন " A.+?a" ব্যবহার করার সময় পদ্ধতিটি নিম্নলিখিত ফলাফল পায়: আনা অ্যালেক্সা আপনি আমাদের উদাহরণ থেকে দেখতে পাচ্ছেন, একই প্যাটার্নের জন্য বিভিন্ন ধরণের কোয়ান্টিফায়ারগুলি বিভিন্ন ফলাফল তৈরি করে। তাই এটি মনে রাখবেন এবং আপনি যা খুঁজছেন তার উপর ভিত্তি করে সঠিক বৈচিত্রটি চয়ন করুন।

রেগুলার এক্সপ্রেশনে অক্ষর পালানো

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

String s = "The root directory is \nWindows"; // Move "Windows" to a new line
String s = "The root directory is \u00A7Windows"; // Insert a paragraph symbol before "Windows"
এর মানে হল যে স্ট্রিং লিটারেল যা নিয়মিত এক্সপ্রেশন বর্ণনা করে এবং " \" অক্ষর ব্যবহার করে (অর্থাৎ মেটাক্যারেক্টার নির্দেশ করতে) অবশ্যই ব্যাকস্ল্যাশগুলি পুনরাবৃত্তি করতে হবে যাতে জাভা বাইটকোড কম্পাইলার স্ট্রিংকে ভুল ব্যাখ্যা না করে। উদাহরণ স্বরূপ:

String regex = "\\s"; // Pattern for matching a whitespace character
String regex = "\"Windows\"";  // Pattern for matching "Windows"
আমরা "স্বাভাবিক" অক্ষর হিসাবে ব্যবহার করতে চাই এমন বিশেষ অক্ষরগুলি এড়াতে ডাবল ব্যাকস্ল্যাশগুলিও ব্যবহার করা আবশ্যক৷ উদাহরণ স্বরূপ:

String regex = "How\\?";  // Pattern for matching "How?"

প্যাটার্ন ক্লাসের পদ্ধতি

ক্লাসে Patternনিয়মিত এক্সপ্রেশনের সাথে কাজ করার জন্য অন্যান্য পদ্ধতি রয়েছে:
  • String pattern()‒ বস্তুটি তৈরি করতে ব্যবহৃত রেগুলার এক্সপ্রেশনের মূল স্ট্রিং উপস্থাপনা প্রদান করে Pattern:

    
    Pattern pattern = Pattern.compile("abc");
    System.out.println(pattern.pattern()); // "abc"
    
  • static boolean matches(String regex, CharSequence input)- আপনাকে রেগুলার এক্সপ্রেশন চেক করতে দেয় রেগেক্স হিসাবে পাস করা টেক্সটের বিপরীতে input। রিটার্ন:

    সত্য - যদি পাঠ্যটি প্যাটার্নের সাথে মেলে;
    মিথ্যা - যদি তা না হয়;

    উদাহরণ স্বরূপ:

    
    System.out.println(Pattern.matches("A.+a","Anna")); // true
    System.out.println(Pattern.matches("A.+a","Fred Anna Alexander")); // false
    
  • int flags()‒ প্যাটার্ন তৈরি করার সময় প্যাটার্নের flagsপ্যারামিটার সেটের মান প্রদান করে বা যদি প্যারামিটার সেট করা না থাকে তাহলে 0। উদাহরণ স্বরূপ:

    
    Pattern pattern = Pattern.compile("abc");
    System.out.println(pattern.flags()); // 0
    Pattern pattern = Pattern.compile("abc",Pattern.CASE_INSENSITIVE);
    System.out.println(pattern.flags()); // 2
    
  • String[] split(CharSequence text, int limit)- পাস করা পাঠ্যকে একটি Stringঅ্যারেতে বিভক্ত করে। প্যারামিটারটি limitপাঠ্যটিতে অনুসন্ধান করা সর্বোচ্চ সংখ্যক মিল নির্দেশ করে:

    • যদি limit > 0- limit-1মিলে যায়;
    • যদি limit < 0- সমস্ত পাঠ্যের সাথে মিলে যায়
    • যদি limit = 0- পাঠ্যের সমস্ত মিল, অ্যারের শেষে খালি স্ট্রিংগুলি বাতিল করা হয়;

    উদাহরণ স্বরূপ:

    
    public static void main(String[] args) {
        String text = "Fred Anna Alexa";
        Pattern pattern = Pattern.compile("\\s");
        String[] strings = pattern.split(text,2);
        for (String s : strings) {
            System.out.println(s);
        }
        System.out.println("---------");
        String[] strings1 = pattern.split(text);
        for (String s : strings1) {
            System.out.println(s);
        }
    }
    

    কনসোল আউটপুট:

    
    Fred
    Anna Alexa
    ---------
    Fred
    Anna
    Alexa
    

    Matcherনীচে আমরা একটি অবজেক্ট তৈরি করতে ব্যবহৃত ক্লাসের আরেকটি পদ্ধতি বিবেচনা করব ।

ম্যাচার ক্লাসের পদ্ধতি

ক্লাসের উদাহরণগুলি Matcherপ্যাটার্ন-ম্যাচিং সঞ্চালনের জন্য তৈরি করা হয়। Matcherনিয়মিত অভিব্যক্তির জন্য "সার্চ ইঞ্জিন"। একটি অনুসন্ধান সম্পাদন করতে, আমাদের এটি দুটি জিনিস দিতে হবে: একটি প্যাটার্ন এবং একটি শুরু সূচক৷ একটি অবজেক্ট তৈরি করতে Matcher, Patternক্লাসটি নিম্নলিখিত পদ্ধতি প্রদান করে: рublic Matcher matcher(CharSequence input) পদ্ধতিটি একটি অক্ষর ক্রম নেয়, যা অনুসন্ধান করা হবে। এটি এমন একটি ক্লাসের উদাহরণ যা CharSequenceইন্টারফেসটি প্রয়োগ করে। আপনি শুধুমাত্র একটি নয় String, একটি StringBuffer, StringBuilder, Segment, বা পাস করতে পারেন CharBuffer। প্যাটার্ন হল একটি Patternবস্তু যার উপর matcherপদ্ধতি বলা হয়। একটি ম্যাচার তৈরির উদাহরণ:

Pattern p = Pattern.compile("a*b"); // Create a compiled representation of the regular expression
Matcher m = p.matcher("aaaaab"); // Create a "search engine" to search the text "aaaaab" for the pattern "a*b"
এখন আমরা আমাদের "সার্চ ইঞ্জিন" ব্যবহার করে মিলগুলি অনুসন্ধান করতে পারি, পাঠ্যে একটি মিলের অবস্থান পেতে পারি এবং ক্লাসের পদ্ধতিগুলি ব্যবহার করে পাঠ্য প্রতিস্থাপন করতে পারি। পদ্ধতিটি boolean find()পাঠ্যের পরবর্তী ম্যাচের জন্য দেখায়। একটি ইভেন্ট মডেলের অংশ হিসাবে একটি সম্পূর্ণ পাঠ্য বিশ্লেষণ করতে আমরা এই পদ্ধতি এবং একটি লুপ স্টেটমেন্ট ব্যবহার করতে পারি। অন্য কথায়, আমরা প্রয়োজনীয় ক্রিয়াকলাপ সম্পাদন করতে পারি যখন একটি ঘটনা ঘটে, অর্থাৎ যখন আমরা পাঠ্যের সাথে মিল খুঁজে পাই। উদাহরণস্বরূপ, আমরা পাঠ্যের মধ্যে একটি মিলের অবস্থান নির্ধারণ করতে এই ক্লাস int start()এবং পদ্ধতিগুলি ব্যবহার করতে পারি। int end()এবং আমরা প্রতিস্থাপন প্যারামিটারের মান দিয়ে ম্যাচগুলি প্রতিস্থাপন করতে String replaceFirst(String replacement)এবং পদ্ধতিগুলি ব্যবহার করতে পারি। String replaceAll(String replacement)উদাহরণ স্বরূপ:

public static void main(String[] args) {
    String text = "Fred Anna Alexa";
    Pattern pattern = Pattern.compile("A.+?a");

    Matcher matcher = pattern.matcher(text);
    while (matcher.find()) {
        int start=matcher.start();
        int end=matcher.end();
        System.out.println("Match found: " + text.substring(start, end) + " from index "+ start + " through " + (end-1));
    }
    System.out.println(matcher.replaceFirst("Ira"));
    System.out.println(matcher.replaceAll("Mary"));
    System.out.println(text);
}
আউটপুট:

Match found: Anna from index 5 through 8
Match found: Alexa from index 10 through 14
Fred Ira Alexa
Fred Mary Mary
Fred Anna Alexa
উদাহরণটি স্পষ্ট করে যে replaceFirstএবং replaceAllপদ্ধতিগুলি একটি নতুন Stringঅবজেক্ট তৈরি করে — একটি স্ট্রিং যেখানে মূল পাঠ্যের সাথে প্যাটার্ন মিলে যায় একটি যুক্তি হিসাবে পদ্ধতিতে পাস করা পাঠ্য দ্বারা প্রতিস্থাপিত হয়। অতিরিক্তভাবে, replaceFirstপদ্ধতিটি শুধুমাত্র প্রথম মিলকে প্রতিস্থাপন করে, তবে replaceAllপদ্ধতিটি পাঠ্যের সমস্ত মিলকে প্রতিস্থাপন করে। মূল লেখাটি অপরিবর্তিত রয়েছে। এবং ক্লাসের সবচেয়ে ঘন ঘন রেজেক্স অপারেশনগুলি ক্লাসের মধ্যেই তৈরি করা হয় Pattern। এগুলি হল পদ্ধতি যেমন , , , এবং . কিন্তু ফণা অধীনে, এই পদ্ধতি ব্যবহার এবং ক্লাস. সুতরাং আপনি যদি কোনও অতিরিক্ত কোড না লিখে কোনও প্রোগ্রামে পাঠ্য প্রতিস্থাপন করতে বা স্ট্রিং তুলনা করতে চান তবে পদ্ধতিগুলি ব্যবহার করুনMatcherStringsplitmatchesreplaceFirstreplaceAllPatternMatcherStringক্লাস আপনার যদি আরও উন্নত বৈশিষ্ট্যের প্রয়োজন হয়, তাহলে Patternএবং Matcherক্লাসগুলি মনে রাখবেন।

উপসংহার

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