REGEX Fine di una stringa

di il
8 risposte

REGEX Fine di una stringa

Salve, volevo una mano su come costruire una regex che matchi una stringa che finisca con ":" + "numero di massimo 5 cifre" (erttt:8712, Test141d:12121, ecc...).
Avevo pensato ad una cosa del genere:
"\:\d{1,5})$"
Dai compilatori online sembra funzionare. E' lato java che poi riscontro problemi.
Uso la libreria java.util.regex.Pattern in cui ho dovuto adattare il carattere \ a \\.
Pattern pattern = Pattern.compile("(\\:\\d{1,5})$");

Potreste darmi un consiglio o una mano?

Grazie

8 Risposte

  • Re: REGEX Fine di una stringa

    erik992 ha scritto:


    E' lato java che poi riscontro problemi.
    Ovvero, quali problemi? Se non riporti l'errore o la descrizione del problema, sarà difficile aiutarti.
  • Re: REGEX Fine di una stringa

    erik992 ha scritto:


    Avevo pensato ad una cosa del genere:
    "\:\d{1,5})$"
    Altra annotazione... la parentesi tonda nell'espressione cosa rappresenta?
  • Re: REGEX Fine di una stringa

    Il problema che riscontro è che non matcha la stringa che passo in input.
    Scusami, mi ero perso una parentesi.
    La regex che utilizzo è la seguente "(\:\d{1,5})$".
  • Re: REGEX Fine di una stringa

    erik992 ha scritto:


    Scusami, mi ero perso una parentesi.
    La regex che utilizzo è la seguente "(\:\d{1,5})$".
    Riporta il pezzo di codice che riceve il pattern e lo valida, così siamo sicuri di non perderci nulla.
  • Re: REGEX Fine di una stringa

    Io ho scritto una cosa del genere, e funziona tranquillamente (o quantomeno mi dice che la stringa è stata trovata):
    
    Pattern pattern = Pattern.compile("(\\:\\d{1,5})$");
    Matcher matcher = pattern.matcher("erttt:8712");
    boolean found = matcher.find();
    System.out.println(found ? "Ho trovato la stringa!" : "Stringa NON trovata");
    
    Ciao!
  • Re: REGEX Fine di una stringa

    E' inserito in un Dto di request di una chiamata Rest dove hostname viene passato tra i campi di input.

    @AssertTrue
    public boolean isOk() {
    Pattern pattern = Pattern.compile("(\\:\\d{1,5})$");
    boolean regexFlag = true;
    if (StringUtils.isNotBlank(hostname)) {
    Matcher matcher = pattern.matcher(hostname);
    regexFlag = matcher.matches();
    }
    return regexFlag;
    }
  • Re: REGEX Fine di una stringa

    erik992 ha scritto:


    Pattern pattern = Pattern.compile("(\\:\\d{1,5})$");

    Potreste darmi un consiglio o una mano?
    Nelle regex le parentesi ( ) descrivono un "gruppo catturante", non esattamente la parentesi "(" e la parentesi ")". Quindi se non devi estrarre il contenuto di quel gruppo, non servirebbero.
    Per il ":" invece non serve fare l'escape, perché non è un carattere "speciale". Quindi \: ("\\:" in stringa) oppure : è indifferente

    Inoltre: vuoi fare il match completo (con matches() ) ... oppure un match "parziale" (con un find() )? Perché con quella regex il match completo non lo fai di certo nei confronti di stringhe come "erttt:8712"!

    In sostanza:
    Pattern pattern = Pattern.compile(":\\d{1,5}$");
    
    System.out.println(pattern.matcher("erttt:8712").find());       // true
    System.out.println(pattern.matcher("Test141d:12121").find());   // true
    System.out.println(pattern.matcher("hello:123456").find());     // false
    System.out.println(pattern.matcher("hello-1234").find());       // false
  • Re: REGEX Fine di una stringa

    Ok. Ovviamente dovevo fare il match parziale. Grazie mille per la risposta
Devi accedere o registrarti per scrivere nel forum
8 risposte