2011-08-18 28 views
5

Ho questo codice, ma non sembra funzionare.Java Regex non corrispondente?

Pattern pattern=Pattern.compile("IMGURSESSION=([0-9a-zA-Z]*);"); 
Matcher matcher=pattern.matcher("IMGURSESSION=blahblah; path=/; domain=.imgur.com"); 
System.out.println(matcher.matches()); 

Qualcuno sa perché?

+0

Non c'è niente di sbagliato con la regex stesso. Ha funzionato quando l'ho provato con [RegexBuddy] (http://www.regexbuddy.com/). –

+1

Lo so. Conosco abbastanza regex per sapere che funzionerà. E RegexBuddy - 40 dollari! Insane! Mi limito a http://gskinner.com/RegExr/ – Isaac

risposta

8

Matcher#matches() il metodo tenta di far corrispondere l'intera sequenza di input allo schema.

Pattern.compile("IMGURSESSION=([0-9a-zA-Z]*);.*$"); //true 
Pattern.compile("IMGURSESSION=([0-9a-zA-Z]*);"); //false 
+0

Mmm, non sapevo che corrispondesse all'intera sequenza, grazie. – Isaac

1

Supponendo che il vostro scopo è quello di estrarre il IMGURSESSION:

import java.util.regex.*; 

Pattern pattern = Pattern.compile("IMGURSESSION=([0-9a-zA-Z]*);.*"); 
Matcher matcher = pattern.matcher("IMGURSESSION=blahblah; path=/; domain=.imgur.com"); 
if (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

Basta fare in modo che si mette in un match tutto modello alla fine di soddisfare la semantica "matcher".