Nhận chỉ mục của một mẫu trong một chuỗi bằng cách sử dụng regex


Câu trả lời:


166

Sử dụng Matcher :

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

câu trả lời phiên bản đặc biệt từ Jean Logeart

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");
      }
   }
}

Kết quả

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

2
Hãy bình luận khi phản đối! @Shadow Tôi giả định này đã được downvoted như không, như yêu cầu OP, cung cấp cho các chỉ số của trận đấu ...
El Ronnoco

4
Được rồi ... Tôi đã phản đối vì câu trả lời này không giải quyết được câu hỏi.

3
Regex của bạn cũng bị lỗi. Đầu tiên (.*)ban đầu tiêu thụ toàn bộ chuỗi, sau đó nó lùi lại đủ xa để (\d+)khớp với một chữ số, để lại sau đó thứ hai (.*)tiêu thụ bất cứ thứ gì còn lại. Tôi nói không phải là một kết quả đặc biệt hữu ích. Ồ, và bạn đã bỏ group(3)qua kết quả của mình.
Alan Moore

2
Không cung cấp cho các chỉ số
piratemurray
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.