Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    su Espressioni regolari

    Ho una stringa del tipo:


    ***a b c (1,2,3) x y z***


    vorrei recuperare il contenuto dentro le parentesi e metterle in un vettore.
    Le parentesi possono essere precedute e seguite da testo

    Se l'interno delle parentesi è vuoto, debbo recuperare un vettore vuoto.

    Non sono bravo con le espressioni regolari: mi aiutate per favore?
    Pietro

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    var paren = stringa.replace(/^.*?\(.*\).*$/, "$1");
    var numeri = paren.split(/[ \,]/);

    Nota che se le tonde sono due, quella RegExp prende dalla prima aperta all'ultima chiusa (ma si puo` impostare diversamente)
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da Mich_
    var paren = stringa.replace(/^.*?\(.*\).*$/, "$1");
    var numeri = paren.split(/[ \,]/);

    Nota che se le tonde sono due, quella RegExp prende dalla prima aperta all'ultima chiusa (ma si puo` impostare diversamente)
    Ti ringrazio.
    Pietro

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Allora, premetto questo:
    Nel mio caso ho una una funzione che mi restituisce una stringa del tipo:

    [id_pratica] In (1,2,3) oppure

    1 = 1 oppure

    1 = 0

    che sono le possibili clausole where di una mia istruzione SQL

    Il problema era quello di sapere se un particolare Id_pratica era nella lista (1,2,3...)

    Ho utilizzato un espressione regolare per estrarmi la serie di valori e metterli in un vettore.
    La espressione regolare che ho usato è:
    codice:
    \((([^)])+)\)
    Non userò questo metodo perchè, in confronto ai metodi tradizionali di ricerca nelle stringhe, ottengo tempi superiori di un ordine di grandezza.

    Insisto qui, solo perchè mi piacerebbe sapere se l'espressione che ho usato, è sbagliata o meno. Ho l'impressione che ci siano troppe parentesi.
    Insomma, mi piacerebbe capirle di più queste espressioni regolari.
    Pietro

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Per le RegExp, puoi vedere le DUE pagine di manuale che trovi in DevGuru: devi leggerle con attenzione, e capirai una buona quantita` di cose.
    Poi se vuoi approfondire, cerca il manuale RE di Perl (ad esempio), dove sono trattate molto piu` diffusamente.


    Nella tua regExp ci sono decisamente troppe parentesi. Tutte sono decisamente troppe, e non so se alcune ti servono (hai da far riferimento alle stringhe trovate?), ma sicuramente si puo` semplificare.

    Una semplificazione estrema potrebbe essere:
    /\([^\)]+\)/
    che significa:
    la stringa inizia con parentesiaperta, prende tutti i caratteri che non sono parentesichiusa, termina con parentesichiusa
    Nota che ho iniziato e finito con / e che davanti a ) ci ho messo un \

    Non essendoci parentesi tonde non-escaped, questa espressione dovrebbe anche essere molto piu` veloce.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Accetto i consigli, ciao

    effettivamente, ho notato che una coppia di parentesi in più, non solo sono inutili, ma anche dannose per le prestazioni.

    perciò, uso la tua espressione, ma con un gruppo per l'estrazione di quello che c'è dentro:

    \(([^)]+)\)

    Pietro

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.