Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Espressione regolare ripetizioni lettere

    Ciao a tutti,
    mi servirebbe controllare se in una stringa sono presenti "parole" composte o contenti una o più lettere ripetute molte volte. Per esempio
    codice:
    ciaaaaaao
    lorrrrrrrd
    cassssa
    e pensavo di farmi dire dal codice se la lettera è ripetuta più di 4 volte.
    Analizzando questo problema ho pensato che sarebbe bello e funzionale fare un preg_match con espressione regolare... ma la mia conoscenza delle espressioni regolari purtroppo non arriva a risolvere questo caso.

    Qualcuno sarebbe così gentile da aiutarmi? ^^
    Spero di essermi spiegato.

    Grazie in anticipo!
    Flash Developer for Rich Media
    PHP, jQuery Developer

  2. #2
    Non e' un granche' ma dovrebbe funzionare:

    codice:
    preg_match_all("#\b\S*(\S)\\1{2,}\S*\b#", $str, $match);
    il numero in rosso indica il numero minimo di ripetizioni che ti interessano, meno 1 (cioe' per 3+ ripetizioni scrivi 2, per 4+ scrivi 3, eccetera).

  3. #3
    Grazie mille, funziona alla perfezione.

    Saresti così gentile e paziente da spiegarmi come funziona questa espressione così metto l'arte da parte? =D

    Te ne sarei molto grato ^^
    Flash Developer for Rich Media
    PHP, jQuery Developer

  4. #4
    In sostanza, per cercare un carattere ripetuto ho scritto (\S)\\1 il che significa:
    - prendi un carattere che non sia uno spazio (o tab, o simile): \S
    - ricordalo (per quello ci sono le parentesi)
    - cercane altri subito dopo: \\1 (si chiama back reference, e fa riferimento a cio' che e' racchiuso nelle parentesi tonde precedenti) ripetuti da n a m volte {n,m} (la sintassi generale)

    Intorno a quello ho messo altri \S* perche' prima e dopo il carattere ripetuto ci possono ovviamente essere altri caratteri che compongono la parola, infine tutto e' racchiuso dagli word boundary (\b).

    Non sono sicuro di essere stato chiarissimo, nel caso posso provare a spiegare meglio (dipende anche dalla tua conoscenza delle regexp)

  5. #5
    No credo di aver capito. =)

    il cancelletto # prima \b e poi dopo fa sempre parte dei "word boundaries"?

    Grazie mille per la spiegazione =)
    Flash Developer for Rich Media
    PHP, jQuery Developer

  6. #6
    No quello e' solo il delimitatore di inizio/fine pattern come richiesto dalla sintassi per le Perl Compatible regexp: puoi scegliere (piu' o meno) qualsiasi carattere, basta che usi lo stesso all'inizio e alla fine.

  7. #7
    Oh grazie =D
    Su Java non è così e io sono abituato a quello

    Grazie millissime ancora =)
    Flash Developer for Rich Media
    PHP, jQuery Developer

  8. #8
    No problem

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.