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

    Aiuto con espressioni regolari

    Ciao a tutti,
    avrei bisogno di una mano per risolvere un piccolo problema.

    Vorrei estrarre alcuni determinati elementi da una variabile e penso che per fare questo debba usare le espressioni regolari.

    Vi faccio subito un esempio:
    Ho una variabile $testo così formata:
    codice:
    $testo = '
    testo vario
    [img]xxx[/img]
    [img]xxx[/img]
    testo variotesto variotesto variotesto vario
    [img]xxx[/img]
    [img]xxx[/img]
    [img]xxx[/img]
    ';
    Da questa variabile vorrei prendere soltanto i vari "[img]xxx[/img]" escludendo quindi tutto il resto. Inoltre mi servirebbe prendere soltanto un determinato numero di queste immagini e penso che potrei farlo tranquillamente con qualche array e qualche ciclo.

    Il problema è che non ho mai usato le espressioni regolare e non ho idea di come si possa fare quello che cerco :S

  2. #2
    Utente di HTML.it L'avatar di dararag
    Registrato dal
    Jan 2008
    Messaggi
    434
    prova così, inserisci tra le varie parti del testo che vuoi separare degli spazi, oppure lascia così, ma solo se conosci cosa è testovario, quindi utilizza questo codice:
    Codice PHP:
    <?php
    $array
    =array (split($testo," " "testovario"));
    ?>
    così ottieni un array con le diverse parti del tuo testo, se vuoi ottenere solo gli hraf, però, ti conviene usare come secondo argomento testovario, se è inserito in un form, prova a salvarlo in una sessione, oppure su un file di testo e poi lo recuperi così:
    Codice PHP:
    <?php
    $apri
    =fopen('testovario.txt','w+');
    $size=filesize('testovario.txt');
    fread($apri,$size);
    ?>
    Se non lo ottieni così dimmi come e vedrò di darti una mano.

  3. #3
    Grazie dararag, comincio a vedere una piccola luce

    Purtroppo "testovario" non è una variabile che posso prevedere. In sostanza questo script mi servirebbe per saltare un passaggio nella pubblicazione di alcuni tipi di articoli nel mio sito.
    In particolare si tratta di gallerie di screenshots che io aggiorno regolarmente nel seguente modo:

    Il giorno 18 Maggio pubblico una galleria il cui contenuto è il seguente:
    codice:
    $content = '
    <h4>18 Maggio 2008</h4>
    [img]xxx[/img]
    [img]xxx[/img]
    [img]xxx[/img]
    [img]xxx[/img]
    [img]xxx[/img]
    ';
    Il 20 maggio aggiorno questa galleria e vado ad aggiungervi altre immagini:
    codice:
    $content = '
    <h4>19 Maggio 2008</h4>
    [img]xxx[/img]
    [img]xxx[/img]
    [img]xxx[/img]
    <h4>18 Maggio 2008</h4>
    [img]xxx[/img]
    [img]xxx[/img]
    [img]xxx[/img]
    [img]xxx[/img]
    [img]xxx[/img]
    ';
    Mi servirebbe estrarre i primi 5 collegamenti per usarli come excerpt da mostrare in home page. Normalmente prendevo di volta in volta il codice delle immagini e lo mettevo nel campo excerpt di wordpress ma vorrei rendere la cosa automatica.

    In pratica nel post ci saranno sempre e solo variabili "<h4>Data</h4>" e "[img]xxx[/img]", io vorrei prendere solo le seconde.

    Spero che ci sia un modo per trovare una soluzione

  4. #4
    Codice PHP:
    $array split("\n"$content);

    $count 0;
    foreach (
    $array as $element) {
        if (
    preg_match("/^<a href/"$element)) {
            echo 
    $element "\n"/* o fai quello che devi quando trovi una riga */
            
    if(++$count == 5) {
                break;
            }
        }

    In realta' se la ricerca e' cosi' semplice, la regular expression e' anche sovrabbondante.

  5. #5
    Ti ringrazio k.b., ma in questo modo mi restituisce tutto l'insieme di immagini :S Questo perché le varie immagini non sono separate da spazi o da a capo.

    Posto una parte di codice reale:
    codice:
    <h4> 10 Maggio 2008</h4>
    
    per semplificare:
    Come si potrebbe fare? Splittando sul tag </a> ?
    [/code]

  6. #6
    Io mi sono attenuto ai dati che hai fornito, e cioe' una variabile con le righe separate dagli a capo

    Se e' tutto su una riga cercherei per prima cosa di sistemare la sorgente di quell'output per farlo scrivere su piu' righe, altrimenti puoi prima fare una sostituzione nella "stringona" inserendo un a capo tra una chiusura e una riapertura di <a>.

    Codice PHP:
    /* $content contiene la stringa lunghissima */
    $content preg_replace("/a><a/""a>\n<a"$content); 
    e poi ci attacchi il codice di prima.

  7. #7
    Avevo capito che il tuo esempio si basava sul mio, effettivamente sono stato poco preciso!
    In ogni caso la tua seconda soluzione la trovo ottima.

    Grazie mille, davvero!

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