Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    2

    Uso di espressioni regolari e di str.match()

    Salve a tutti, sto realizzando un programma che legge da file di testo e ho bisogno di fare un controllo su una determinata stringa che deve avere solo determinati caratteri e non altri... Mi spiego meglio. La stringa in questione da analizzare è la seguente
    01:38:59,935 --> 01:39:01,604
    è in particolare la stringa che in un file .srt (Sottotitoli) indica il tempo in cui il sottotitolo annesso deve essere inserito. Perciò è necessario che questa stringa sia perfetta e che non ci siano lettere o qualsiasi altro genere di carattere che possano modificarne l'integrità.
    Per questo motivo ho pensato di usare le espressioni regolari ma pur leggendo la documentazione e guide varie online non riesco ancora a creare qualcosa di sicuro in ogni caso e soprattutto funzionante.

    Quindi come potrei fare in modo che il programma mi avvisi che in quella stringa non ci siano caratteri di disturbo e che quindi rispetti lo standard? Uso la srt.match()? Avete altre idee?

    Grazie per l'auito.

  2. #2
    Se vuoi utilizzare le espressioni regolari c'è una semplice ed immediata guida su questo stesso sito. Comunque ho assunto che
    la stringa di esempio che hai scritto non può assumere forme differenti ed ho provato a scrivere un espressione regolare per
    definirla:

    codice:
    String regex = "[0-9]{2}+:+[0-9]{2}+:+[0-9]{2}+,+[0-9]{3}+ +[-]{2}+>+ +[0-9]{2}+:+[0-9]{2}+:+[0-9]{2}+,+[0-9]{3}";
    Sicuramente si può scrivere meglio, abbreviare, abbellire, è il mio primo tentativo. Ho fatto un test e funziona.

    Cosa significa quella bruttissima stringa apparentemente incomprensibile?

    [0-9]{2} dove {2} indica la molteplicità, significa che puoi scrivere 2 cifre tra quelle indicate tra parentesi quadre (range dei numeri tra 0 e 9),in questo caso un numero tra 0 e 9

    Il + indica la concatenazione, e siccome dopo le due cifre ci sono i due punti, scrivo [0-9]{2}+:, che letteralmente significa
    "dopo le due cifre mettici i due punti". Dopo i due punti devi concatenare altre 2 cifre, quindi avrai
    [0-9]{2}+:+[0-9]{2}.

    Poi ci devi concatenare un altro ":", due numeri, una "," e TRE numeri --> [0-9]{2}+:+[0-9]{2}+:+[0-9]+,+[0-9]{3}. Nota il {3} invece del {2}.

    Poi devi concatenare uno spazio, il simbolo "-" per due volte, il simbolo ">" ed uno spazio:

    [0-9]{2}+:+[0-9]{2}+:+[0-9]+,+[0-9]{3}+ +[-]{2}+>+ +

    Quel che viene dopo è speculare alla prima parte.

    Una volta che hai creato la tua espressione regolare la puoi utilizzare per convalidare le stringhe che ti interessano.

    Direttamente da questo sito, si può fare in due modi:

    1)

    codice:
    
    
    codice:
    private static boolean check(String regex, String input) {
            if(Pattern.matches(regex, input)) {
                return true;
            } else {
                return false;
            }
        }
    2)

    codice:
    public static boolean check(String regex, String input){
      Pattern pattern = Pattern.compile(regex);
      Matcher matcher = pattern.matcher(input);
    
    
      if (matcher.matches())
        return true;
      else
        return false;
    }
    Dove regex è l'espressione regolare e l'input è la stringa che vuoi verificare.

    Test completo:

    codice:
    public class Regex {
    
    
    	public static void main(String[] args) {
    		
    		String input = "01:38:59,935 --> 01:39:01,604";
    		
    		String regex = "[0-9]{2}+:+[0-9]{2}+:+[0-9]{2}+,+[0-9]{3}+ +[-]{2}+>+ +[0-9]{2}+:+[0-9]{2}+:+[0-9]{2}+,+[0-9]{3}";
    		
    		boolean test = check(regex, input);
    		System.out.println(test);
    	}
    
    
    	private static boolean check(String regex, String input) {
    		if(Pattern.matches(regex, input)) {
    			return true;
    		} else {
    			return false;
    		}
    	}
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    2
    Grazie mille. Risposta davvero esaustiva. Funziona alla perfezione e inoltre hai chiarito anche molti dubbi che avevo.

  4. #4
    Figurati

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.