Visualizzazione dei risultati da 1 a 5 su 5

Discussione: espressioni regolari

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268

    espressioni regolari

    esiste un'espressione regolare che mi permetta di estrapolare una parte di testo ben definita?

    Mi spiego meglio con un esempio pratico:

    $a="Oggi è una bella giornata (25° di temperatura), andrò a fare un giro in bicicletta";

    quale espressione regolare devo mettere per estrapolare "25° di temperatura" tenuto presente che questa parte di testo è delimitata da "(" e ")"?


    PS so che potrei fare:

    @mom1=split(/\)/,$a);
    @mom2=split(/\(/,$mom1[0]);
    $risultato=$mom2[1]; #cioè: "25° di temperatura"

    il problema è che mi pare una cosa un po' lunghetta, e poco pulita.

    Aumento le difficoltà:

    $a="Oggi è una bella giornata (25° di temperatura), andrò a fare un giro in bicicletta (devo dimagrire!)";

    voglio ottenere l'array:
    @risultato=("25° di temperatura","devo dimagrire!");

    PS so che potrei fare:

    @mom1=split(/\)/,$a);
    foreach $mom1(@mom1)
    {
    @mom2=split(/\(/,$mom1);
    push (@risultato,$mom2[1]);
    }

    # @risultato è l'array che volevo ottenere

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    $a ~= /(\d+)/; # salva in $1 il primo valore numerico
    push(@risultato, $1);

    Poi se vuoi qualcosa di piu` raffinato, puoi cercarlo, ad esempio:
    /(\d+)\°/;
    /\((\d+)\°/;

    Oppure se vuoi cercare tutti i numeri ci metti il /g e vai a leggere l'array @+ (o @-, non ricordo)
    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
    Registrato dal
    May 2002
    Messaggi
    268
    in questo modo estrapolo dalla variabile i valori numerici (attenzione, so che è un errore di battitura, $a =~ non $a ~=, ... scusa se correggo, è per coloro che leggono il post e vogliono provare).
    Direi una buona soluzione. Tutto ciò prevede comunque, come ho indicato io, che io sia al corrente di come è $a.

    Partiamo da un altro presupposto:

    $a è un testo qualsiasi.
    In $a esistono parole o numeri o simboli (è indifferente) racchiuse fra parentesi tonde (e questo è ciò che intendevo di definito, non $a ma il fatto di avere del testo inserito fra parentesi)
    Voglio creare un array composto dal testo racchiuso fra parentesi tonde.

    Ribadisco, la soluzione 2 che ho proposto funziona perfettamente, mi chiedevo se esiste la possibilità di fare la stessa cosa in modo più "pulito"!

    Grazie per la pazienza!

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Cioe` vuoi estrarre tutti i pezzi tra parentesi?
    /\((.+?)\)/g

    L'ultimo viene salvato in $1, I puntatori di inizio e fine di tutti nelle array @+ e @-
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    sapevo che c'era qualcosa di meglio!!!!

    Quindi:

    $a="Oggi è una bella giornata (25° di temperatura), andrò a fare un giro in bicicletta (devo dimagrire!)";

    @risultato = split(/\((.+?)\)/,$a);
    $n=0;
    foreach $risultato(@risultato)
    {splice (@risultato,$n,1), $n++}

    #@risultato -> array dei testi racchiusi fra parentesi


    e


    $a="Oggi è una bella giornata (25° di temperatura), andrò a fare un giro in bicicletta (devo dimagrire!)";

    @risultato = split(/\((.+?)\)/,$a);
    $n=0;
    foreach $risultato(@risultato)
    {$n++, splice (@risultato,$n,1)}

    #@risultato -> array dei testi esterni alle parentesi


    Non possiamo fare morire il Perl!!!!
    Grazie.

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.