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

    Estrarre parte di stringa tra caratteri specifici

    Spiegare in un titolo il problema è difficile!

    Dovrei estrarre da una stringa tutte le parole contenute dentro doppia parentesi tonda.
    Per intenderci:
    Codice PHP:
    <?php
    $stringa
    ="Questa stringa è privata ((questo pezzo pubblico)) poi privato ((e ancora pubblico)).

                 ((<img src=\"percorso/immagine.png\" />));
    Dovrei visualizzare:

    questo pezzo pubblico
    e ancora pubblico
    [img]percorso/immagine.png[/img]

    Così per un testo di lunghezza variabile (testo, link a immagini e tutto quello che l'utente vuole aggiungere).
    Ho cercato in lungo e in largo ma non ho trovato nulla a riguardo.

    Potreste aiutarmi?
    Grazie mille

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230

    Re: Estrarre parte di stringa tra caratteri specifici

    Originariamente inviato da portapipe

    Ho cercato in lungo e in largo ma non ho trovato nulla a riguardo.
    hai guardato anche le espressioni regolari?

  3. #3
    Sinceramente si, ma ho capito veramente poco.
    Ho provato qualche script trovato sul forum ma mi creava array di parole e non c'era la possibilità di estrarle tutte.
    ereg,eregi e le varie str ma non fanno al caso mio (credo )

    Ci dovrà pur essere un'espressione tipo:
    1.prendi i valori che trovi tra (( e )) e scrivili a video
    2.controlla se ci sono altre doppie parentesi tonde
    3.se TRUE scrivile a video, altrimenti fermati

    ...o simili.

  4. #4
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Beh, le hai guardate male allora, perche' e molto semplice

    preg_match_all('/\(\(.*?\)\)/s',$stringa,$matches);
    print_r($matches);

  5. #5
    E poi faccio un ciclo FOR per estrarre tutti i valori dell'array, giusto?
    Pensa che vado avanti da giorni a dappertutto!
    Per ultimo avevo provato preg_match poi mi sono arreso. Avevo anche sbagliato non mettendo \ prima delle singole parentesi!
    Non c'è, per curiosità, un altro metodo?
    Perché dovrei inviare il testo da un form, salvarlo in mysql e visualizzare solo la parte tra parentesi.
    Il procedimento ora è:
    Scrivo nel form
    Invio alla pagina upload.php
    Ricevo nella pagina upload.php
    Salvo nel database
    Redirect a visualizza.php
    Vedo tutto quello che c'è scritto tra le parentesi.

    Con preg_match_all estrapolo il testo tra parentesi, con ciclo FOR li visualizzo uno per uno e con str_replace tolgo le doppie parentesi, giusto?

    grazie bubi1 del tempestivo aiuto. Sei stato preziosissimo!

    p.s. sarà stata una domanda stupida ma quando stai ore ed ore davanti a codici, inizi a chiamare tua moglie per funzioni! . Grazie ancora.

  6. #6
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    si, fai il ciclo che vuoi per estrarre i dati dall'array

    se vuoi che il preg ti restituisca anche i dati senza parentesi, fai un
    preg_match_all('/\(\((.*?)\)\)/s',$stringa,$matches);
    e guarda nel $matches[1]
    cosi eviti str_replace successivo

    si, ci sono anche altri metodi. se t'interessa per scopi didattici come sarebbe quello a 3 passi piu' o meno come lo immaginavi tu, eccolo qua:

    Codice PHP:
    $l strlen($stringa);
    $c $k 0;
    $matches = array();
    for(
    $i=0;$i<$l;$i++){
      if(
    $stringa{$i} == ')' && $stringa{$i+1} == ')'){
        
    $c=0;
        
    $k++;
      }
      if (
    $stringa{$i} == '(' && $stringa{$i-1} == '('){
        
    $c=1;
        continue;
      }
      if(
    $c){
        
    $matches[$k] .= $stringa{$i};
      }
    }
    print_r($matches); 
    credo sia ovvio che vale la pena studiare le espressioni regolari per evitare di scrivere cazzate del genere nel codice

  7. #7
    Già

    Grazie ancora!

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.