2012-01-20 24 views
64

Belirli bir model için bir dize aramak istiyorum.Regex kullanarak bir dizideki desen dizisini al

Normal ifade sınıfları, dizideki şablonun konumlarını (dizgedeki dizinleri) sağlar mı?
Desenin 1 oluşumundan daha fazlası olabilir.
Pratik bir örnek?

+2

http://docs.oracle.com/javase/6 /docs/api/java/util/regex/Matcher.html –

cevap

118

Kullanım 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()); 
    } 
} 
-3
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"); 
     } 
    } 
} 

Sonucu

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

Lütfen aşağı çekerken yorum yapın! @Shadow Bu istek, OP talebi gibi, maçın dizinini vermediği gibi düşürülmüş olduğunu varsayalım. –

+2

Tamam ... Bu soruya cevap vermediği için reddedildi. – bdares

+1

Regex'iniz de arızalı. İlk '(. *)' Orijinal olarak tüm dizgeyi tüketir, o zaman ((\ d +) one bir rakamla eşleşmesine izin verecek kadar uzağa geri döner, daha sonra '(. *) Leaving bırakarak geriye kalanı tüketir. Özellikle yararlı bir sonuç değil. Oh, ve sen grubundan (3) çıktın. –

0

Jean Logeart gelen özel sürüm cevap

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}; 
} 
İlgili konular