Visualizzazione risultati 1 fino 13 di 13

Discussione: estrai testo

  1. #1
    express non è connesso AlterVistiano
    Data registrazione
    08-08-2003
    Residenza
    Cagliari/Pisa
    Messaggi
    799

    Predefinito estrai testo

    esiste una funzione built-in per fare qualcosa tipo recuperare il contenuto del testo compreso fra due sequenze di caratteri ben definite?

    qualcosa che faccia insomma questo:
    Codice PHP:
    $stringa = "sdafsad [b]testo in grassetto[/b] gfasgddsgfd [/b] fsafasdfas"
    $testo_da_grassettare = str_between("[b]", "[/b]", $stringa, NOT_GREEDY);
    $testo_da_grassettare_errato = str_between("[b]", "[/b]", $stringa, GREEDY);
    che abbia come risultato di settare:
    Codice PHP:
    $testo_da_grassettare = "testo in grassetto";
    $testo_da_grassettare_errato = "testo in grassetto[/b] gfasgddsgfd ";
    me la devo fare da me? :mregreen:
    Ultima modifica di express : 13-11-2005 alle ore 13.29.36
    http://express.altervista.org
    Dato un lavoro, si possono scegliere due sole delle seguenti caratteristiche: veloce, economico, di qualità.
    Così capita che se un lavoro è veloce ed economico non sarà di qualità; se è veloce e di qualità non sarà economico; se è economico e di qualità non sarà veloce.

  2. #2
    L'avatar di mythologia
    mythologia non è connesso Moderatore
    Data registrazione
    05-01-2004
    Messaggi
    2,614

    Predefinito

    le regular_expressions, cerca su google

  3. #3
    Guest

    Predefinito

    non so se ho capito bene ma puoi usare la funzione explode di php dove imposti come paramtro così
    Codice PHP:
    $variabile = explode ("[B]", $frasedaesplodere);
    e lui ti crea degli array contenenti i vari pezzi
    quindi
    $variabile[0] contiene il primo pezzp
    $variabile[1] il secondo e così via..

  4. #4
    Guest

    Predefinito

    Eventrualmente come altrnativa puoi usare qualcosa tipo
    Codice PHP:
    $str=eregi_replace("[b]","<b>",$str);
    $str=eregi_replace("[/b]","</b>",$str);

  5. #5
    express non è connesso AlterVistiano
    Data registrazione
    08-08-2003
    Residenza
    Cagliari/Pisa
    Messaggi
    799

    Predefinito

    con le espressioni regolari semplicemente non riesco. Con questo codice mi da l'array dei risultati vuoto, mentre mi aspetterei il codice racchiuso frai tag code. dove sbaglio?

    Codice PHP:
    $pcre_pattern = "/\\[code\\]*\\[\\/code\\]/";
    preg_match($pcre_pattern, $example, $a_reg_result);
    p.s. non posso usare le altre espressioni perchè non mi permettono la possibilità di match non greedy.
    http://express.altervista.org
    Dato un lavoro, si possono scegliere due sole delle seguenti caratteristiche: veloce, economico, di qualità.
    Così capita che se un lavoro è veloce ed economico non sarà di qualità; se è veloce e di qualità non sarà economico; se è economico e di qualità non sarà veloce.

  6. #6
    L'avatar di Leo91
    Leo91 non è connesso Altervistiano Junior
    Data registrazione
    28-03-2004
    Residenza
    alle tue spalle
    Messaggi
    728

    Predefinito

    Beh puoi usare str_replace in questo modo:

    Codice PHP:
    <?
    $stringa
    = "Io sono [B]una persona[/B]";
    $stringa = str_replace("[B]","<strong>",$stringa);
    $stringa = str_replace("[/B]","</strong>",$stringa);
    echo
    "$stringa";
    ?>
    Questo ti darà:
    Io sono una persona


    Attento è case-sensitive!!

  7. #7
    Guest

    Predefinito

    usa str_ireplace ke è case-unsensitive

  8. #8
    L'avatar di Leo91
    Leo91 non è connesso Altervistiano Junior
    Data registrazione
    28-03-2004
    Residenza
    alle tue spalle
    Messaggi
    728

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da express
    con le espressioni regolari semplicemente non riesco. Con questo codice mi da l'array dei risultati vuoto, mentre mi aspetterei il codice racchiuso frai tag code. dove sbaglio?

    Codice PHP:
    $pcre_pattern = "/\\[code\\]*\\[\\/code\\]/";
    preg_match($pcre_pattern, $example, $a_reg_result);
    p.s. non posso usare le altre espressioni perchè non mi permettono la possibilità di match non greedy.
    Codice PHP:
    $pcre_pattern = "#\[b\](.*?)\[/b\]#i";
    preg_match_all($pcre_pattern, $example, $a_reg_result);
    così è corretto, meglio preg_match_all, altrimenti si ferma al primo riconoscimento

    usare str_replace senza controllo è da pazzi... se poi apri la tag e non la chiudi? La "b" non fa molti danni (a parte errori di validazione), ma se usi tabelle e cose del genere, si sballa tutto il layout
    Ultima modifica di Inverno : 13-11-2005 alle ore 23.18.21

  10. #10
    express non è connesso AlterVistiano
    Data registrazione
    08-08-2003
    Residenza
    Cagliari/Pisa
    Messaggi
    799

    Predefinito

    grazie inverno, mo mi studio il pattern, così magari vedo di imparare oltre che fare copia incolla
    http://express.altervista.org
    Dato un lavoro, si possono scegliere due sole delle seguenti caratteristiche: veloce, economico, di qualità.
    Così capita che se un lavoro è veloce ed economico non sarà di qualità; se è veloce e di qualità non sarà economico; se è economico e di qualità non sarà veloce.

  11. #11
    L'avatar di Leo91
    Leo91 non è connesso Altervistiano Junior
    Data registrazione
    28-03-2004
    Residenza
    alle tue spalle
    Messaggi
    728

    Predefinito

    Citazione Originalmente inviato da Inverno
    Codice PHP:
    $pcre_pattern = "#\[b\](.*?)\[/b\]#i";
    preg_match_all($pcre_pattern, $example, $a_reg_result);
    così è corretto, meglio preg_match_all, altrimenti si ferma al primo riconoscimento

    usare str_replace senza controllo è da pazzi... se poi apri la tag e non la chiudi? La "b" non fa molti danni (a parte errori di validazione), ma se usi tabelle e cose del genere, si sballa tutto il layout
    beh e perchè non usare un if(!ereg.....)???
    Ad esempio faccio il controllo:
    Codice PHP:
    <?
    $stringa
    = "Io sono [B]una persona[/B]";
    $stringa = str_replace("[B]","<strong>",$stringa);
    $stringa = str_replace("[/B]","</strong>",$stringa);
    if(
    ereg("([B])",$stringa) && !ereg("([/B])",$stringa)) {
    echo
    "$stringa[/B]";
    } else {
    echo
    "$stringa";
    }
    ?>
    NON è il massimo, è confusionario, ma l'ho fatto in velocità!!
    Certo che sicuramente...hai ragione te

    Però....se uno vuol far così....se lo script è semplice...allora si può fare!

  12. #12
    Guest

    Predefinito

    Io ho solo detto che ci vuole un controllo, su come farlo ci sono 5468 (numero rnd) modi
    Io ad esempio uso un pre-parser che controlla sia che siano aperti e chiusi correttamente i tag, sia che non ci siano tag annidati non regolari

  13. #13
    L'avatar di Leo91
    Leo91 non è connesso Altervistiano Junior
    Data registrazione
    28-03-2004
    Residenza
    alle tue spalle
    Messaggi
    728

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •