Tôi muốn tìm kiếm một chuỗi cho một mẫu cụ thể.
Các lớp biểu thức chính quy có cung cấp các vị trí (chỉ mục trong chuỗi) của mẫu trong chuỗi không?
Có thể có nhiều hơn 1 lần xuất hiện của mô hình.
Bất kỳ ví dụ thực tế?
Tôi muốn tìm kiếm một chuỗi cho một mẫu cụ thể.
Các lớp biểu thức chính quy có cung cấp các vị trí (chỉ mục trong chuỗi) của mẫu trong chuỗi không?
Có thể có nhiều hơn 1 lần xuất hiện của mô hình.
Bất kỳ ví dụ thực tế?
Câu trả lời:
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());
}
}
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};
}
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
(.*)
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.