Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di grisson
    Registrato dal
    Jul 2006
    Messaggi
    166

    espressione regolare per tag [quote]

    mi servirebbe una mano con questa espressione regolare perchè mi sto incasinando.
    mi servirebbe qualcosa che mi restituisca il testo all'interno del tag bbcode [ quote ]...[ /quote ].
    il problema piu grande è che se ho dei tag annidati , ad esempio
    [ quote ]aaaaaaaa[ quote ]bbbbbbbb[ /quote ]ccccccc[ /quote ]

    mi viene ridato questo testo:

    aaaaaaaa[ quote ]bbbbbbbb

    cioè dalla prima apertura del tag alla prima chiusura.
    c'è un modo per dire all'espressione di prendere del testo che non contenga un ulteriore tag di apertura?
    quello che avrei intenzione di fare è di processare tutti i tag partendo da quelli piu interni per poi passare man mano a quelli piu esterni, tipo cosi:
    passaggio 1:
    [ quote ]aaaaaaaa<blockquote>bbbbbbbb</blockquote>ccccccc[ /quote ]

    passaggio 2:
    <blockquote>aaaaaaaa<blockquote>bbbbbbbb</blockquote>ccccccc</blockquote>


  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    codice:
    $testo_processato = preg_replace(array("[ quote ]","[ /quote ]"),array("<blockquote>","</blockquote>"), $testo_da_processare);
    non va?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it L'avatar di grisson
    Registrato dal
    Jul 2006
    Messaggi
    166
    si però se ho 3 tag di apertura e 2 di chiusura me li sostituisce tutti, io intendevo qualcosa che processa tag corrispondenti, cioè i 2 di apertura con i 2 di chiusura, il 3° di apertura deve rimanere cosi perchè non ha un "compagno" di chiusura.

    spero si capisca quello che ho scritto :master:

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ah, quindi il tuo problema più che di sostituzione è di riformattazione di codice malformato?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it L'avatar di grisson
    Registrato dal
    Jul 2006
    Messaggi
    166
    ni, cioè mi servirebbe qualcosa che oltre a sostituire mi faccia un controllo sui tag, cioè appunto sostituisca quei tag che hanno poi il corrispondente tag di chiusura.

  6. #6
    Utente di HTML.it L'avatar di grisson
    Registrato dal
    Jul 2006
    Messaggi
    166
    se a qualcuno interessa ho semi-risolto con una funzioncina scrausa che non usa neanche le espressioni regolari

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    Prova questo .....

    Togliere l'asterisco dopo [

    codice:
    function parseTags($string,$strTag,$endTag,$strRep,$endRep) {
     //------- Numero delle occorenze dei tags nella string
     $nbrOccStrTag = substr_count($string,$strTag);
     $nbrOccEndTag = substr_count($string,$endTag);
     
     //------- Numero minimo per la sostituzione
     $minOcc       = min($nbrOccStrTag,$nbrOccEndTag);
     
     //------- Sostituzione del tag di apertura
     for ($i=1;$i<=$minOcc;$i++) {
      $posTag = strpos($string,$strTag);
    	$string = substr_replace($string,$strRep, $posTag, strlen($strTag));
     } // for ($i=1;$i<=$minOcc;$i++)
     
     //------- Sostituzione del tag di chiusura
     //        Inverto la string perche substr_replace non lavora bene
     //        partendo dalla fine
     $string = strrev($string);
     for ($i=1;$i<=$minOcc;$i++) {
      $posTag = strpos($string,strrev($endTag));
    	$string    = substr_replace($string,strrev($endRep), $posTag, strlen($endTag));
     } // for ($i=1;$i<=$minOcc;$i++)
     
     //------- Rimetto la string allo stato iniziale 
     $string = strrev($string);
     
     return $string;
    } // function parseTags($string,$strTag,$endTag,$strRep,$endRep) 
     
    function parseQuote($string) {
     return parseTags($string,"[*quote]","[*/quote]","<blockquote>","</blockquote>");
    } // 
    
    $string = "[*quote]qnsqkl  sjkdcnqsdncl s cslkc,ls [*quote],sdkspdsols,osdksqpfcqsocoqs[*/quote][*quote][*/quote]";
    $string = parseQuote($string); 
    print $string;
    
     ?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Utente di HTML.it L'avatar di grisson
    Registrato dal
    Jul 2006
    Messaggi
    166
    grazie, funziona egregiamente.
    ciao

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