Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    7

    [Java] Regular expression, chi mi da una mano?

    Ciao a tutti, ho la necessità di fare i seguenti controlli in una stringa:

    _deve contenere lettere e numeri
    _deve contenere almeno uno di questi caratteri !#$%&()+,-.:;<>[]^_{|}~
    _non deve contenere nessuno di questi "'*/=?@\`

    Vorrei provare ad utilizzare la classe Pattern ma essendo la prima volta non ho capito bene come si utilizza la composizione della regular expression che fa al caso mio.

    Pattern p = Pattern.compile();
    Matcher m = p.matcher(myString);
    boolean b = m.matches();

    Per il primo caso ho provato ad utilizzare il pattern "[a-z][0-9]" ma non funziona
    Sicuramente potrei risolvere con altri metodi, ma mi sono ostinato ad usare questa classe Pattern che, secondo me, ha un grosso potenziale

    Ciao

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480

    Moderazione

    Ho spostato la discussione nel forum dedicato a Java.
    In futuro, poni qui le tue domande relative a questo linguaggio.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    7

    Re: Moderazione

    Originariamente inviato da alka
    Ho spostato la discussione nel forum dedicato a Java.
    In futuro, poni qui le tue domande relative a questo linguaggio.

    Ciao!
    ops non avevo visto la sottosezione, sorry

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    7
    Il primo controllo l'ho fatto così e funziona:

    Pattern p1 = Pattern.compile("[0-9][A-Za-z]");
    Matcher m1 = p1.matcher(myString);
    boolean b1 = m1.find();

    Per il socondo controllo ho utilizzato questo regex "[!#$%&()+,-.:;<>[]^_{|}~]" ma mi da il seguente errore:

    java.util.regex.PatternSyntaxException: Unclosed character class near index 24
    [!#$%&()+,-.:;<>[]^_{|}~]

    Dove sbaglio? Mancano gli escape?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da osvit
    Il primo controllo l'ho fatto così e funziona:

    Pattern p1 = Pattern.compile("[0-9][A-Za-z]");
    Matcher m1 = p1.matcher(myString);
    boolean b1 = m1.find();

    Per il socondo controllo ho utilizzato questo regex "[!#$%&()+,-.:;<>[]^_{|}~]" ma mi da il seguente errore:

    java.util.regex.PatternSyntaxException: Unclosed character class near index 24
    [!#$%&()+,-.:;<>[]^_{|}~]

    Dove sbaglio? Mancano gli escape?
    Per il primo puoi fare semplicemente "[0-9a-zA-Z]". Per il secondo devi prestare più attenzione. Certi caratteri sono "speciali" nelle espressioni regolari e se vuoi matchare proprio -quel- carattere, devi farne l'escape. Esempio: '[' è un carattere speciale. A livello di espressione regolare, se vuoi matchare il '[' dovresti mettere "\[". Dal momento che lo scrivi in una stringa "literal", dovrai fare a sua volta l'escape del '\\'. Quindi: "\\[".

    Per il resto, usa 10 minuti del tuo tempo per leggere <qui> la tabella delle regex in Java.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Ciao, adesso anche io sono alle prese con le espressioni regolari, ho quotato l'asterisco ma il boolean mi risulta comunque false...se invece non lo quoto mi restituisce angling meta character '*' near index 0 *.txt
    Qualcuno mi sa accennare la motivazione??
    Questo è il mio codice.

    Codice PHP:
    public static void main(String args[]){
            
    Pattern pat=Pattern.compile("\\*.txt");
            
    Matcher matcher =pat.matcher("paola.txt");
            
    boolean flag=matcher.matches();
            
    System.out.println(flag);
            

    Il mio scopo è quello di accettare qualsiasi stringa con estensione .txt
    Grazie.

  7. #7
    Originariamente inviato da Paoletta_r
    Ciao, adesso anche io sono alle prese con le espressioni regolari, ho quotato l'asterisco ma il boolean mi risulta comunque false...se invece non lo quoto mi restituisce angling meta character '*' near index 0 *.txt
    Qualcuno mi sa accennare la motivazione??
    Questo è il mio codice.

    Codice PHP:
    public static void main(String args[]){
            
    Pattern pat=Pattern.compile("\\*.txt");
            
    Matcher matcher =pat.matcher("paola.txt");
            
    boolean flag=matcher.matches();
            
    System.out.println(flag);
            

    Il mio scopo è quello di accettare qualsiasi stringa con estensione .txt
    Grazie.
    Per indicare "qualsiasi carattere" devi utilizzare il punto... non l'asterisco. Affinchè il nome del file sia valido dunque devono essere soddisfatte le seguenti condizioni:
    1) deve esserci almeno un carattere all'inizio della stringa (espressione ^.{1,});
    2) la stringa deve terminare con .txt (espressione \\.txt$).

    La tua espressione regolare deve essere la seguente:

    Codice PHP:
    Pattern p Pattern.compile("^.{1,}\\\\.txt$"); 
    Al mio segnale... scatenate l'inferno!

  8. #8
    Grazie, dovrò ristudiarmi meglio le espressioni regolari, ero convintissima che "* "significava qualsiasi sequenza di caratteri, mentre il "." qualsiasi carattere ma 1 solo.
    Adesso cerco di capire la tua espressione visto che funziona.
    Ancora grazie

  9. #9
    si il . indica "qualsiasi carattere singolo" però l'espressione {1,} subito dopo indica che l'espressione precedente (in questo caso il . ) deve essere ripetuta almeno 1 volta.

    Al mio segnale... scatenate l'inferno!

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    5
    Anch'io ho un problema simile, devo controllare che una stringa abbia almeno una lettera al suo interno ad almeno un numero.
    Il codice seguente mi dà problemi di compilazione perchè netbeans non riconosce Pattern e matcher anche se ho importato java.util.*
    Codice PHP:
    Pattern p1 Pattern.compile("[0-9][A-Za-z]");
    Matcher m1 p1.matcher(myString);
    boolean b1 m1.find(); 
    Cosa devo fare?

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.