2015-11-11 7 views
6

Ho la seguente espressione regolare (link)espressioni regolari lavora su un tester online, ma non riesce in java

[\d\.]+[ ](.*?)[ ]{2,}(.+) 

Tuttavia il codice Java equivalente, non riesce ad abbinare:

String REGEX = "[\\d\\.]+[ ](.*?)[ ]{2,}(.+)"; 
Pattern pattern = Pattern.compile(REGEX); 
String line = "1. QUEEN     WE ARE THE CHAMPIONS" 
Matcher matcher= pattern.matcher(line); 
String artist = matcher.group(0); 
String song = matcher.group(1); 

posso' t sembra capire cosa va storto, qualche idea?

+2

Dove si trova la chiamata effettiva a "partite" o "trova"? – RealSkeptic

+1

@ ᴘᴀɴᴀʏɪᴏᴛɪs Non dovresti usare i gruppi 1 e 2? – Biffen

+1

Perché il tuo primo spazio è contenuto in una classe di caratteri: '[]'? È altrettanto efficace avere '[\ d \.] +' E '(. *?)' Separati da uno spazio letterale. –

risposta

5

È necessario chiamare find per passare alla prima partita. Aggiungi matcher.find(); prima di chiamare group().

Una volta che il codice funziona come previsto.

+0

Ah, l'eccezione "Nessuna corrispondenza trovata" mi ha fuorviato a pensare che il mio schema fosse in qualche modo sbagliato e non riuscito a eguagliare, grazie! –

1

È necessario chiamare matcher.matches() prima del gruppo.

if(matcher.matches()){ 
     String artist = matcher.group(0); 
     System.out.println(artist); 
     String song = matcher.group(1); 
     System.out.println(song); 
     } 
Problemi correlati