Belirli bir kalıp için bir dizge aramak istiyorum.
Normal ifade sınıfları, dizge içindeki kalıbın konumlarını (dizge içindeki dizinler) sağlıyor mu?
Modelin 1'den fazla oluşumu olabilir.
Pratik bir örnek var mı?
Belirli bir kalıp için bir dizge aramak istiyorum.
Normal ifade sınıfları, dizge içindeki kalıbın konumlarını (dizge içindeki dizinler) sağlıyor mu?
Modelin 1'den fazla oluşumu olabilir.
Pratik bir örnek var mı?
Yanıtlar:
Matcher'ı kullanın :
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());
}
}
Jean Logeart'tan özel baskı yanıtı
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");
}
}
}
Sonuç
Found value: This order was places for QT3000! OK?
Found value: This order was places for QT300
Found value: 0
(.*)başlangıçta tüm dizgiyi tüketir, sonra (\d+)bir basamakla eşleşmesine izin verecek kadar geriye çekilir , ardından kalan (.*)her şeyi tüketmeye bırakılır. Özellikle yararlı bir sonuç olmadığını söyleyebilirim. Oh, ve group(3)sonuçlarının dışında kaldın .