Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435

    Domanda su regular expression

    Ciao ho delle stringhe fatte così:

    000numero_altraroba.txt

    per esempio:
    0005_hello.txt
    0012_hi.txt

    insomma iniziano con un numero arbitrario di zeri in testa, poi un numero poi un underscore.

    Ora,dato un numero, voglio trovare stringhe che inizino per quel numero, eventualmente preceduto da zeri

    Avendo
    codice:
    String n = "5";
    Ho fatto:

    codice:
    s.matches("^(0)*"+n)
    Come mai mi esce false??

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    non vorrei dire una str***** però mi sembra che il simbolo "^" significhi tranne
    ad esempio: [0-9&&[^12345]] rappresenta i numeri 0, 6, 7, 8 e 9

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Direi che dovresti provare così:

    codice:
    s.matches("0*" + n + ".*");
    In questo modo recuperi tutte le stringhe che iniziano con un numero arbitrario di zeri (0*), seguite dal numero da te indicato ( n ) seguito da un qualunque altro carattere (.*).

    Potresti anche raffinare di più la RegEx, indicando che dopo il numero deve esserci l'underscore:
    codice:
    s.matches("0*" + n + "_.*");
    così da evitare di trovare anche le stringhe che "contengono" il numero indicato, ma non esattamente il numero indicato.

    Esempio, se n = 55 la prima RegEx becca anche tutte queste stringhe:
    codice:
    "0055_pippo.txt"
    "0558_pippo.txt"
    "5589_pippo.txt"
    I caratteri ^ e $ utilizzati, rispettivamente, per indicare l'inizio e la fine della stringa li puoi mettere oppure no (sono facoltativi, in questo caso particolare). Il motivo per cui non funzionava non era il fatto che ^ serve per negare (infatti, serve a negare un gruppo di caratteri se viene usato all'interno delle parentesi quadre, ma questo non è il caso), ma perchè mancava l'indicazione del fatto che la stringa, dopo il numero, doveva essere seguita da qualcos'altro. L'espressione che hai indicato tu funziona solo per stringhe di questo tipo:

    codice:
    xxx
    0xxx
    00xxx
    000xxx
    ...
    con un numero arbitrario di zeri e un numero alla fine.

    PS: le parentesi tonde servono a delimitare i gruppi, ove possibile non usarle.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.