Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di softoxy
    Registrato dal
    Apr 2001
    Messaggi
    202

    catturare la stringa che corrisponde a quella matchata

    Utilizzando i metodi delle espressioni regolari non mi fornisce la stringa corrispondente al match, perchè?

    patternStr = "c";
    inputStr = "a b c d ";
    Pattern pattern = Pattern.compile(patternStr);
    Matcher matcher = pattern.matcher(inputStr);
    String groupStr = "";
    System.out.println("number match = " + matcher.groupCount());
    System.out.println("match = " + matcher.find() + " " + matcher.matches());
    if (matcher.matches()) {
    for (int i = 0; i <= matcher.groupCount(); i++) {
    groupStr += matcher.group(i);
    }
    }
    return groupStr;

    matcher.find() restituisce true, cioè ha trovato una stringa, mentre matcher.matches() false e quindi anche matcher.group(i) non restituisce nulla.....
    Non capisco il motivo.

    Grazie!
    Soft!2001

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: catturare la stringa che corrisponde a quella matchata

    Originariamente inviato da softoxy
    matcher.find() restituisce true, cioè ha trovato una stringa, mentre matcher.matches() false e quindi anche matcher.group(i) non restituisce nulla.....
    Non capisco il motivo.
    Secondo la documentazione di matches():
    Returns:
    true if, and only if, the entire region sequence matches this matcher's pattern
    Quindi lui cerca di matchare l'intera sequenza con il pattern, cosa che nel tuo caso è falsa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di softoxy
    Registrato dal
    Apr 2001
    Messaggi
    202

    .........

    Si è vero su matcher.matches(), ma a me interessa poco, piuttosto devo estrapolare la stringa che fa match dalla stringa completa, matcher.group(i), per capirci non funziona........

    patternStr dovrebbe essere una espressione regolare.... = "[0-9]", quindi se volessi estrapolare un numero da una stringa di test come faccio?

    Cosa può essere....

    grazie per la risposta!
    Soft!2001

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: .........

    Originariamente inviato da softoxy
    Si è vero su matcher.matches(), ma a me interessa poco, piuttosto devo estrapolare la stringa che fa match dalla stringa completa, matcher.group(i), per capirci non funziona........
    Spero di aver capito bene il tuo problema ... le espressioni regolari in Java le ho già usate ma non moltissimo.

    Ho fatto questa semplice prova:
    codice:
    String patternStr = "c..o";
    String inputStr = "ciao  ciccia  caio";
    
    Pattern pattern = Pattern.compile (patternStr);
    Matcher matcher = pattern.matcher (inputStr);
    
    while (matcher.find ())
    {
        System.out.println ("Trovata occorrenza: " +
                            "start=" + matcher.start () + "   " +
                            "end=" + matcher.end () + "   " +
                            "group=" + matcher.group ());
    }
    Mi stampa (correttamente):
    codice:
    Trovata occorrenza: start=0   end=4   group=ciao
    Trovata occorrenza: start=14   end=18   group=caio
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di softoxy
    Registrato dal
    Apr 2001
    Messaggi
    202

    ...........

    Si è quello che voglio, manon capisco perchè a me non funziona, in più ho utilizzato lil metodo matcher.groupCount() che mi da sempre 0.

    Comunque uso il TUO pezzo di codice che funziona.

    Grazie mille per l'aiuto, non ci sarei mai riuscito entro oggi a capire il problema.
    Ancora grazie!
    Soft!2001

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Ho riletto ora il tutorial ... già è vero: group e groupCount hanno a che fare con il testo "catturato" dalle parentesi ( ) !

    Ecco un altro esempio:
    codice:
    String patternStr = "c(.)(.)o";
    String inputStr = "ciao  ciccia  caio";
    
    Pattern pattern = Pattern.compile (patternStr);
    Matcher matcher = pattern.matcher (inputStr);
    
    while (matcher.find ())
    {
        System.out.println ("Trovata occorrenza: " +
                            "start=" + matcher.start () + "   " +
                            "end=" + matcher.end () + "   " +
                            "group=" + matcher.group () + "   " +
                            "groupCount=" + matcher.groupCount ());
    
        for (int i = 1; i <= matcher.groupCount (); i++)
            System.out.println ("  group" + i + "=" + matcher.group (i));
    }
    Stampa:
    codice:
    Trovata occorrenza: start=0   end=4   group=ciao   groupCount=2
      group1=i
      group2=a
    Trovata occorrenza: start=14   end=18   group=caio   groupCount=2
      group1=a
      group2=i
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di softoxy
    Registrato dal
    Apr 2001
    Messaggi
    202

    ..........

    Grazie!
    Soft!2001

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.