রেজেক্স ব্যবহার করে স্ট্রিংয়ের কোনও প্যাটার্নের সূচক পান


90

আমি একটি নির্দিষ্ট প্যাটার্নের জন্য একটি স্ট্রিং অনুসন্ধান করতে চাই।

নিয়মিত প্রকাশের ক্লাসগুলি স্ট্রিংয়ের মধ্যে প্যাটার্নের অবস্থানগুলি (স্ট্রিংয়ের মধ্যে সূচকগুলি) সরবরাহ করে?
প্যাটার্নটির আরও 1 টি ঘটনা ঘটতে পারে।
কোন ব্যবহারিক উদাহরণ?


উত্তর:


166

ম্যাচার ব্যবহার করুন :

public static void printMatches(String text, String regex) {
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(text);
    // Check all occurrences
    while (matcher.find()) {
        System.out.print("Start index: " + matcher.start());
        System.out.print(" End index: " + matcher.end());
        System.out.println(" Found: " + matcher.group());
    }
}

5

জিন লোগার্টের বিশেষ সংস্করণের উত্তর

public static int[] regExIndex(String pattern, String text, Integer fromIndex){
    Matcher matcher = Pattern.compile(pattern).matcher(text);
    if ( ( fromIndex != null && matcher.find(fromIndex) ) || matcher.find()) {
        return new int[]{matcher.start(), matcher.end()};
    }
    return new int[]{-1, -1};
}

-2
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    public static void main( String args[] ){

      // String to be scanned to find the pattern.
      String line = "This order was places for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
      } else {
         System.out.println("NO MATCH");
      }
   }
}

ফলাফল

Found value: This order was places for QT3000! OK?
Found value: This order was places for QT300
Found value: 0

4
ডাউনওটিংয়ের সময় কমেন্ট করুন! @ শ্যাডো আমি ধরে নিচ্ছি যে এটি ওপেনের অনুরোধ হিসাবে, ম্যাচের
সূচিটি

4
ঠিক আছে ... আমি উজ্জীবিত হয়েছি কারণ এই উত্তরটি প্রশ্নের সমাধান করে না।

4
আপনার রেজেক্সও ত্রুটিযুক্ত। প্রথমটি (.*)পুরো স্ট্রিংটি গ্রাস করে, তারপরে এটি (\d+)একটি অঙ্কের সাথে মেলে ধরে রাখার পক্ষে যথেষ্ট ব্যাক করে, তারপরে দ্বিতীয়টি (.*)যা কিছু রেখে যায় তা গ্রাস করে। আমি বিশেষভাবে কার্যকর ফলাফল নয়, বলব। ওহ, এবং আপনি group(3)আপনার ফলাফল বাদ দিয়েছেন।
অ্যালান মুর

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