2014-01-08 1 views
4

Мой matcher.groupCount() дает мне 4, но когда я использую matcher.group(0), ..., matcher.group(0), это дает мне ошибку.Ярлык/Matcher Java, количество ненулевых групп, но получение ошибок?

Ниже мой код:

Pattern pattern = Pattern.compile("([0-9]+).([0-9]+).([0-9]+).([0-9]+)"); 
Matcher matcher1, matcher2; 

GeoIP[0][0] = (GeoIP[0][0]).trim(); 
GeoIP[0][1] = (GeoIP[0][1]).trim(); 

System.out.println(GeoIP[0][0]); 
System.out.println(GeoIP[0][1]); 

matcher1 = pattern.matcher(GeoIP[0][0]); 
matcher2 = pattern.matcher(GeoIP[0][1]); 

System.out.println("matcher1.groupCount() = " + matcher1.groupCount()); 
System.out.println("matcher2.groupCount() = " + matcher2.groupCount()); 

System.out.println("matcher1.group(0) = " (matcher1.group(0)).toString()); 

консоли:

Exception in thread "main" 1.0.0.0 
1.0.0.255 
matcher1.groupCount() = 4 
matcher2.groupCount() = 4 

java.lang.IllegalStateException: No match found 
    at java.util.regex.Matcher.group(Unknown Source) 
    at filename.main(filename.java:linenumber) 

номер строки указывает на

System.out.println("matcher1.group(0) = " (matcher1.group(0)).toString()); 

ответ

7

groupCount просто говорит вам, сколько групп определены в регулярном выражение. Если вы хотите получить доступ к результату, сначала вам нужно выполнить матч!

if (matcher1.find()) { 
    System.out.println("matcher1.group(0) = " (matcher1.group(0)).toString()); 
    } else { 
    System.out.println("No match."); 
    } 

Также . специальный символ в регулярном выражении, вы, вероятно, хотел \\.?

+0

YESSSS! БОЛЬШОЕ СПАСИБО!!!! <3 – FailedMathematician

1

Если я правильно понимаю, вам нужен доступ к четырем байтам, которые создают IP-адрес. Вместо использования групп вы можете попробовать регулярное выражение, соответствующее IP-адресу, а затем разбить найденную строку.

String GeoIPs = "192.168.1.21, 10.16.254.1, 233.255.255.255"; 
Pattern pattern = Pattern.compile("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"); 
Matcher matcher; 

matcher = pattern.matcher(GeoIPs); 

while (matcher.find()) { 
    String match = matcher.group(); 
    String[] ipParts = match.split("\\."); 
    for (String part : ipParts) { 
     System.out.print(part + "\t"); 
    } 
    System.out.println(); 
} 

Есть некоторые ответы по Java регулярных выражений для IP: экстракции Extract ip addresses from Strings using regex и regex ip address from string.

 Смежные вопросы

  • Нет связанных вопросов^_^