Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [stringhe]Estrazione di una stringa e conteggio caratteri

    Ciao a tutti!

    So che non è una discussione molto "generale", ma vorrei riuscire a realizzare un programma PHP che faccia quanto segue:

    [list=1][*]Riceve in ingresso una stringa che contiene, tra l'altro, una sottostringa S1 compresa tra i tag e .
    S1 può essere una singola parola, o una serie di parole divise da spazi di un carattere.[*]Estrae S1 e la memorizza nella variabile B1[*]Restituisce come risultato il numero di lettere che compongono B1 in questo modo:
    (n) se B1 è composta da una parola di n caratteri
    (n, m) se B1 è composta da 2 parole rispettivamente di n e m caratteri
    (n, m, k) se B1 è composta da 3 parole rispettivamente di n, m e k caratteri
    e così via.[/list=1]

    Grazie dell'aiuto!
    Saluti!

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Codice PHP:
    $stringa "questa è una stringa [b]e questo è il testo in grassetto[/b] contenuto";
    preg_match("#[b](.*)[/b]#i",$stringa,$ris);
    preg_match_all("#\\w+#",$ris[0],$words);
    $str ''$len = array();
    for(
    $i=1,$conta=count($words[0])-1;$i<$conta;$i++) {
    $len[] = strlen($words[0][$i]);
    }
    $str implode(',',$len);
    echo 
    $str
    Magari si può fare tutto con una riga di codice e una bella regexp.

  3. #3

    ........

    Ciao.
    Tirato via e testato poco:
    Codice PHP:
    <?php 
    function getString($string)
    {
        
    $start strpos($string,"[b]");
        
    $end strpos($string,"[/b]");
        
    $length $end - ($start+3); 
        
    $b1 substr($string,($start+3),$length);
        return 
    str_word_count($b1,1);
    }
    $result getString("fuori fuori [b]Contenuto del tag B[/b]pippo pippo");
    foreach(
    $result as $value)
    {
        echo 
    strlen($value)."
    "
    ;
    }
    ?>

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  4. #4
    Ciao nicola75ss e Wisher!

    Grazie per le risposte!
    Elegante il ciclo for del primo script con le due istruzioni all'interno dello stesso.

    Magari si può fare tutto con una riga di codice e una bella regexp
    In effetti sarebbe molto bello essere in grado di scrivere un simile codice con le regexp, perchè vorrebbe dire padroneggiarle proprio bene. Io dopo 5 giorni che non le uso mi dimentico anche quel poco che so al loro riguardo!!!


  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Più conciso di così non ci riesco.

    Codice PHP:
    $stringa "questa è una stringa [b]e questo è il testo in grassetto che contiene[/b] contenuto";
    // ?: serve per fare in modo che cerchi il testo racchiuso tra [b] e [/b]
    // ma senza conteggiare la b iniziale e la b finale
    preg_match("#(?:[b])(.*)(?:</b)>#i",$stringa,$ris);
    preg_match_all("#\w+#",$ris[1],$words);
    $str implode(',',array_map(create_function('$elm','return strlen($elm);'),$words[0]));
    echo 
    $str
    quota il messaggio per copiarlo perchè il forum, oltre a mangiarsi come sempre il backslash prima della w, ha anche aggiunto uno spazio tra [b] e la parentesi che non ci vuole.

    Edit. Domanda per gli esperti di espressioni regolari: è possibile ottenere le singole parole racchiuse tra due tag, come in questo caso, con una sola regexp?
    Grazie.

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Non fare caso alle due righe di commenti. Ho scritto una fagianata.

    Togli pure i ?: e sostituiscila con questa.
    codice:
    preg_match("#(.*)#i",$stringa,$ris);

  7. #7
    per quel che ne so in linea generale non è possibile ottenere le parole contenute tra due tag già separate e ordinate in un array. L'unico caso sarebbe quello in cui nella stringa il testo racchiuso tra i tag si presentasse una volta sola. In teoria allora si può forse aggirare il problema usando preg_split in questo modo:

    codice:
    $res = preg_split('/<\/b>.*[b]|^.*[b]|<\/b>.*$|\W+/isU',$str,-1,PREG_SPLIT_NO_EMPTY) ;
    dA .. foto di viaggio
    L'esperienza è il tipo di insegnante più difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  8. #8
    Codice PHP:
    $stringa "fuori fuori [b]Contenuto del tag B[/b]pippo pippo";
    echo 
    preg_replace_callback('#(?i)(^|[^\\2]+)([b])([^\\4]+)([/b])([^\a]+|$)#',create_function('$w','return preg_replace_callback("/(\w+)/",create_function("\$w","return strlen(\$w[1]);"),$w[3]);'),$stringa); 
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da andr3a
    Codice PHP:
    $stringa "fuori fuori [b]Contenuto del tag B[/b]pippo pippo";
    echo 
    preg_replace_callback('#(?i)(^|[^\\2]+)([b])([^\\4]+)([/b])([^\a]+|$)#',create_function('$w','return preg_replace_callback("/(\w+)/",create_function("\$w","return strlen(\$w[1]);"),$w[3]);'),$stringa); 


    Complimenti andr3a.
    Quando dicevo che magari si poteva risolvere con una riga di codice pensavo proprio a te e ad anakin.
    Non ho la minima idea di cosa hai scritto ma ovviamente funziona alla grande.

  10. #10
    grazie ma credo sia meglio, di solito, scrivere un paio di linee in più piuttosto che arrivare a creare "mostri di questo tipo", dato che la manutenzione e la leggibilità vanno a farsi bendire


    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.