Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    13

    [espressioni regolari] cerco aiuto

    Ciao a tutti!
    Io dovrei realizzare un'espressione regolare che data una stringa qualsiasi di caratteri alfanumerici "metchi" solo nel caso in cui il numero di lettere maiuscole presenti nella stringa non siano maggiori di x (con x a picere).
    Qualcuno sa come potrei fare? Io nn so più dove sbattere la testa (è da pochissimo che ho iniziato a guardare le espressioni regolari...)
    Ringrazio anticipatamente quanti possano essermi d'aiuto...

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Manca la specifica del linguaggio... in javascript ad esempio questa:

    re = /(([A-Z]+[^A-Z]*){6,}/;

    fa il match (torna true) per qualunque stringa contenente 6 o più caratteri maiuscoli...

    In javascript:
    [xyz] rappresenta un set di caratteri: [A-Z] sono tutti i maiuscoli
    [^xyz] è la negazione del set: [^A-Z] tutti i caratteri NON maiuscoli
    + = quello che precede viene trovato una o più volte
    * = quello che precede viene trovato zero o più volte
    {n,} = quello che precede viene trovato n o più volte

    Traducila per il tuo linguaggio di programmazione.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    13
    Ti ringrazio innanzitutto per la tua disponibilità.
    Comunque io queste espressioni dovrò tradurle in java, tuttavia al momento le sto ancora studiando in chiave teorica (dato che non le avevo mai viste prima d'ora). Il mio problema è che le lettere maiuscole (cioè quelle lettere che non devono comparire più di un numero x prefissato) sono sparse in mezzo ad altre lettere che possono essere minuscole o numeri, e credo (in caso contrario ti prego di perdonare la mia ignoranza in materia) che tale problema rimanga anche col tuo esempio visto che nell'espressione /(([A-Z]+[^A-Z]*){6,}/ non mi sembra venga inserita la possibilità che ci possano essere minuscole o numeri appunto, tu che ne dici?

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    [^A-Z] = nessuna lettera maiuscola, qualunque altro carattere ammesso. Già detto.

    codice:
    import java.util.regex.*;
    
    public class regExp {
      
      public regExp(String str, int repMax) {    
        Pattern p = Pattern.compile("([A-Z]+[^A-Z]*){"+(repMax+1)+",}");
        Matcher m = p.matcher(str);
        System.out.println(str+" match: "+m.matches());
      }
      
      public static void main (String[] args) {
        regExp prova = new regExp("XPAre1@WQp",5);
        regExp prova1 = new regExp("XPArW_sds_OPe1@WQp",5);
      }
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    13
    Ho provato a scrivere l'espressione regolare che mi hai suggerito nel programma Teh regex coach (programma che data un'espressione regolare ti dice se la stringa che gli dai in input "metcha" oppure no) modificando l'intervallo da 0 a 6: ([A-Z]+[^A-Z]*){0,6}. Il problema è che "metchano" soltanto quelle stringhe che iniziano con lettere maiuscole (senza contare il fatto che anche se inserisco nella stringa un numero di lettere maiuscole superiore a 6 la stringa "mectha" lo stesso). Dove ho sbagliato?

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Ah, hai ragione sulla lettera maiuscola iniziale, così il problema dovrebbe essere risolto.

    codice:
    import java.util.regex.*;
    
    public class regExp {
    
      public regExp(String str, int repMax) {
        Pattern p = Pattern.compile("[^A-Z]*([A-Z]+[^A-Z]*){"+(repMax+1)+",}");
        Matcher m = p.matcher(str);
        System.out.println(str+" match: "+m.matches());
      }
    
      public static void main (String[] args) {
        regExp prova = new regExp("asdXPAre1@WQp",5);
        regExp prova1 = new regExp("1aXPArW_sds_OPe1@WQp",5);
      }
    }
    hai un match se si verifica la condizione espressa nella RegEXP, ossia se ammettiamo che a te interessino solo le stringhe contenenti al più 5 caratteri maiuscoli, vorrai scartare tutte le stringhe con 6 o più caratteri maiuscoli. Allora, devi trovare tutte le stringhe che contengono almeno 6 caratteri maiuscoli e scartarle. Il programmino lì sopra fa proprio quello, anche se puoi pure variare il numero massimo di caratteri maiuscoli che vuoi trovare: ti basta solo invertire il boolean (non l'ho fatto nel programma)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    13
    Grazie mille finalmente ho risolto!!!
    Comunque credo che purtroppo dovrò crearne ancora di espressioni regolari per sto progetto, al limite ti romperò ancora le scatole!
    Intanto ti saluto e grazie infinite ancora!

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    13
    Mi è sorto un altro dubbio...
    Avendo questa espressione regolare: [^A-Z]*([A-Z][^A-Z]*){2,5} (che accetta tutte le stringhe contenenti un numero di lettere maiuscole comprese tra 2 e 5), come si fa per aggiungere il vincolo di lunghezza minima della stringa totale? Mi spiego meglio, io vorrei mantenere il vincolo così com'è per quanto riguarda le lettere maiuscole ma vorrei definire anche quella che deve essere la lunghezza minima della stringa totale (per esempio: lettere maiuscole comprese tra 2 e 5 con lunghezza minima della stringa pari a 3)...??

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    bhè, quello lo fai con length della stringa che passi al test. Non servono espressioni regolari

    Nella tuo metodo di controllo di validità avrai un

    if sulla lunghezza e annidato all'interno il match dell'espressione regolare. Se non passa l'if della lunghezza non serve controllare nemmeno l'espressione regolare.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    13
    Sì hai ragione, era tanto per capire se era possibile incorporare il controllo sull'espressione regolare, ma va bene anche così...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.