জাভা RegEx ক্ষেত্রে সংবেদনশীল?


111

জাভাতে, যখন একটি রিজেক্স প্যাটার্নটি সন্ধানের জন্য প্রতিস্থাপন সব করবেন তখন:

replaceAll("\\?i\\b(\\w+)\\b(\\s+\\1)+\\b", "$1"); 

(ক্রমাগত কেস-সংবেদনশীল শব্দগুলি সদৃশ করার জন্য সদৃশ পরীক্ষা করতে হবে), আমি কোথায় আছি তা নিশ্চিত নই ?i। আমি পড়েছিলাম এটি শুরুতে হওয়ার কথা, তবে আমি যদি এটিটি বের করি তবে আমি টানা শব্দের সদৃশ (যেমন পরীক্ষার পরীক্ষা) ধরি, তবে কেস-সংবেদনশীল শব্দ নয় (উদাহরণস্বরূপ টেস্ট পরীক্ষা)। সুতরাং আমি ভেবেছিলাম আমি শুরুতে? যুক্ত করতে পারি তবে এটি কাজটি করে বলে মনে হয় না। কোন চিন্তা? ধন্যবাদ!


এই চেক আউট stackoverflow.com/a/55980176/3593084
Mr.Q

উত্তর:


119

আপনি যদি শুরুতে এটি অন্তর্ভুক্ত করতে চান তবে রিজেক্সবাডি আমাকে বলছেন, এটি সঠিক বাক্য গঠন:

"(?i)\\b(\\w+)\\b(\\s+\\1)+\\b"

167

আপনি কেস সংবেদনশীল রিজেক্সগুলিও মেলাতে পারেন এবং প্যাটার্নটি ব্যবহার করে এটি আরও পঠনযোগ্য করতে পারেন C

Pattern mypattern = Pattern.compile(MYREGEX, Pattern.CASE_INSENSITIVE);
Matcher mymatcher= mypattern.matcher(mystring);

2
ম্মম্ম .... বিটওয়াইস ইনক্লুসিভ ওআর অপারেশনস ...Pattern.compile(myregex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE)
নিক গ্রেলে

4
এটি এই (?i)জিনিসটির চেয়ে অনেক বেশি পঠনযোগ্য , জাভা রেজিক্সগুলি ইতিমধ্যে যথেষ্ট অপঠনযোগ্য ছিল: এস
বার্তেক বনচেউইচজ

এটি 4 বছর আগে রিলেটের উত্তর হিসাবে একই উত্তর, তবুও এটি সমস্ত ভোট পায়। অস্বাভাবিক.
জুমজুম

@Zoomzoom, তাই না যখন আমি এটা লিখেছে :) আপনি relet এর সংস্করণ ইতিহাস চেক আপনি দেখতে এটা 2018 সালে এই পরিবর্তিত stackoverflow.com/posts/3436124/...
খ্রিস্টান Vielma

126

হ্যাঁ, জাভা রেজেক্সে কেস সংবেদনশীলতা ইচ্ছামতো সক্ষম এবং অক্ষম করা যেতে পারে।

দেখে মনে হচ্ছে আপনি এরকম কিছু চান:

    System.out.println(
        "Have a meRry MErrY Christmas ho Ho hO"
            .replaceAll("(?i)\\b(\\w+)(\\s+\\1)+\\b", "$1")
    );
    // Have a meRry Christmas ho

মনে রাখবেন যে এম্বেড করা Pattern.CASE_INSENSITIVE পতাকাটি (?i)নয় \?i। এও নোট করুন যে একটি অতিমাত্রায় \bপ্যাটার্ন থেকে সরানো হয়েছে।

(?i)কেস-insensitivity সক্ষম করতে প্যাটার্ন শুরুতে স্থাপন করা হয়। এই বিশেষ ক্ষেত্রে এটি পরে ধরণীতে ওভাররাইড করা হয় না, সুতরাং কার্যত পুরো প্যাটার্নটি কেস-সংবেদনশীল।

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

প্রদর্শন করার জন্য, এখানে মত বর্ণের রান ধ্বসে একটি অনুরূপ উদাহরণ "AaAaaA"শুধু "A"

    System.out.println(
        "AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
            .replaceAll("(?i)\\b([A-Z])\\1+\\b", "$1")
    ); // A e I O u

এখন ধরুন যে আমরা উল্লেখ করেছি যে রানটি কেবলমাত্র যদি বড় হাতের অক্ষর দিয়ে শুরু হয় তবেই ধসে পড়তে হবে। তারপরে আমাদের অবশ্যই (?i)এটি যথাযথ জায়গায় রাখতে হবে:

    System.out.println(
        "AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
            .replaceAll("\\b([A-Z])(?i)\\1+\\b", "$1")
    ); // A eeEeeE I O uuUuUuu

আরও সাধারণভাবে, আপনি নিজের ইচ্ছে মতো প্যাটার্নের মধ্যে কোনও পতাকা সক্ষম এবং অক্ষম করতে পারেন।

আরো দেখুন

  • java.util.regex.Pattern
  • regular-expressions.info/Modifiers
    • নিয়মিত এক্সপ্রেশনের ভিতরে মোডগুলি নির্দিষ্ট করা
      • /regex/i( Pattern.CASE_INSENSITIVEজাভাতে) পরিবর্তে আপনি এটি করতে পারেন/(?i)regex/
    • নিয়মিত এক্সপ্রেশনটির একমাত্র অংশের জন্য মোডগুলি চালু এবং বন্ধ করা
      • আপনি করতে পারেন /first(?i)second(?-i)third/
    • সংশোধনকারী স্প্যানস
      • আপনি করতে পারেন /first(?i:second)third/
  • নিয়মিত- এক্সপ্রেসন.ইন.ফো / ওয়ার্ড সীমানা (সর্বদা \bএকটি \wএবং এ এর মধ্যে থাকে \s)

সম্পর্কিত প্রশ্নগুলি


36

আপনার সম্পূর্ণ অভিব্যক্তি যদি সংবেদনশীল না হয় তবে আপনি কেবল CASE_INSENSITIVEপতাকাটি নির্দিষ্ট করতে পারেন :

Pattern.compile(regexp, Pattern.CASE_INSENSITIVE)

উত্তর করার জন্য ধন্যবাদ. এটি সন্ধানের জন্য আমি সন্ধান করছিলাম। অজগরটিতে আমরা আবার জেনেভাতেও একইরকম উত্তর খুঁজছিলাম।
ডগল

0

আপনি আপনার প্রাথমিক স্ট্রিংকে নেতৃত্ব করতে পারেন, যা আপনি প্যাটার্ন মিলের জন্য যাচাই করতে যাচ্ছেন, নিম্নের ক্ষেত্রে to এবং আপনার প্যাটার্নে যথাক্রমে লোয়ার কেস প্রতীক ব্যবহার করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.