n° 185
Maggio/Giugno 2013
Maggio 21, 2013, 10:29:15 am *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  

* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Aiuto su sostituzione testo  (Letto 741 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
fermat85
Full Member
***

Karma: +4/-2
Scollegato Scollegato

Messaggi: 496


Mostra profilo WWW
« inserita:: Giugno 22, 2012, 05:44:27 pm »

ciao!!
ho un problema con una parte di testo che devo sostituire/levare:
Codice:
{codecitation class="brush: c-sharp;"}
{codecitation class="brush: java;"}
{codecitation class="brush: php;"}
{/codecitation}
l'ultimo è facile da levare, ma per i primo non saprei come fare perchè nn sono sempre identici, c'è sempre una parte che cambia.
è possibile dirgli di sostituire il tutto con uno spazio?
cioè in sostanza dovrei levare le righe composte in quel modo.
Registrato

Super
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 8


Mostra profilo E-mail
« Risposta #1 inserita:: Giugno 23, 2012, 10:28:36 am »

La soluzione più pulita ed elegante è di utilizzare le espressioni regolari: tutti i linguaggi di programmazione hanno un metodo/funzione replace che prende come parametro un'espressione regolare (in Java c'è ReplaceAll). L'unica difficoltà è la scrittura dell'espressione regolare.

Come suggerimento per la scrittura dell'espressione regolare:

la prima parte è uguale al testo (utilizzando però i caratteri di escape): codecitation class= [^;]*;
Con l'ultima parte [^;]* si fa match con tutti i simboli finché non trova il carattere ;
Registrato
Super
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 8


Mostra profilo E-mail
« Risposta #2 inserita:: Giugno 23, 2012, 10:30:45 am »

Ecco una guida veloce sulle espressioni regolari in php, contiene anche gli esempi per il replace

http://php.html.it/articoli/leggi/851/espressioni-regolari/
Registrato
fermat85
Full Member
***

Karma: +4/-2
Scollegato Scollegato

Messaggi: 496


Mostra profilo WWW
« Risposta #3 inserita:: Giugno 23, 2012, 09:32:15 pm »

intanto ti ringrazio per la risposta!!
solo che nn ho ben capito bene alcune cose.
cominciando da quella più semplice.
devo levare questo: {/codecitation}
Codice:
$fullText = utf8_encode(str_replace("\{/codecitation\}", "", $row['fulltext']));
io continuo a vederlo.
dove sto sbagliando?
Registrato

fermat85
Full Member
***

Karma: +4/-2
Scollegato Scollegato

Messaggi: 496


Mostra profilo WWW
« Risposta #4 inserita:: Giugno 25, 2012, 05:57:27 pm »

allora.
i problemi sono due: uno è la regular expression e l'altro è json.
partiamo da qua:
Codice:
<?php

$preg 
"{codecitation class= [^;]*}";
$preg2 "{/codecitation}";
$conn mysqli_connect($host$user$pass$db) or die(mysqli_connect_error());
$cmd "SELECT * FROM j25_content WHERE id = " $_GET['id'];
if (
mysqli_connect_errno()) {
    echo 
"Connessione fallita: " . die(mysqli_connect_error());
}
$result mysqli_query($conn$cmd);
$rows = array();
while (
$row mysqli_fetch_array($resultMYSQLI_ASSOC)) {
    
$introText utf8_encode(str_replace($preg""$row['fulltext']));
    
$introText utf8_encode(str_replace($preg2""$row['fulltext']));
    
$fullText utf8_encode(str_replace($preg""$row['fulltext']));
    
$fullText utf8_encode(str_replace($preg2""$row['fulltext']));
    
$rows[] = array(
        
'title' => $row['title'],
        
'introtext' => $introText,
        
'fulltext' => $fullText
    
);
}
echo 
$fullText;
//echo json_encode($rows);
mysqli_close($conn);
come vedete ho commentato la parte relativa a json.
cosi la parte {/codecitation} sparisce.
ma non spariscono le parti più complicate.
mi sono letto anche l'articolo però nn riesco a capire dove sbaglio.
Registrato

Super
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 8


Mostra profilo E-mail
« Risposta #5 inserita:: Giugno 26, 2012, 10:35:10 am »

La funzione str_replace non accetta espressioni regolari. Per le espressioni regolari si può usare preg_replace() come descritto qui: http://it2.php.net/preg_replace

Per l'espressione regolare scrivi:
$preg = "\{codecitation class=[^;]*;\"\}"
Registrato
fermat85
Full Member
***

Karma: +4/-2
Scollegato Scollegato

Messaggi: 496


Mostra profilo WWW
« Risposta #6 inserita:: Giugno 26, 2012, 11:58:21 am »

ah ok quindi il problema era anche quello.
allora ho fatto così:
Codice:
$preg = "@\{codecitation class=[^;]*;\"\}@";
$fullText = utf8_encode(preg_replace($preg, "", $row['fulltext']));
ma mi dava questo errore:
Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in articolo.php on line 19

girando un pò ho visto che bisogna impostare un delimitatore.
ho provato ad esempio così:
Codice:
$preg = "@\{codecitation class=[^;]*;\"\}@";
[/php]
nn ho errori ma ancora nn funziona.
ho provato anche altri delimitatori ma in nessun caso riesco a levare quella parte.
Registrato

Super
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 8


Mostra profilo E-mail
« Risposta #7 inserita:: Giugno 26, 2012, 12:17:37 pm »

Ho provato questo file php e sembra funzionare, ovviamente non legge da db

http://pastebin.com/9MrRPz5d
Registrato
fermat85
Full Member
***

Karma: +4/-2
Scollegato Scollegato

Messaggi: 496


Mostra profilo WWW
« Risposta #8 inserita:: Giugno 26, 2012, 12:58:25 pm »

si anche a me funziona il tuo esempio.
nn mi funziona da db però:
Codice:
$preg = "@\{codecitation class=[^;]*;\"\}@";
$preg2 = "{/codecitation}";
$conn = mysqli_connect($host, $user, $pass, $db) or die(mysqli_connect_error());
$cmd = "SELECT * FROM j25_content WHERE id = " . $_GET['id'];
if (mysqli_connect_errno()) {
    echo "Connessione fallita: " . die(mysqli_connect_error());
}
$result = mysqli_query($conn, $cmd);
$rows = array();
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
    $introText = preg_replace($preg, "", $row['fulltext']);
    $introText = str_replace($preg2, "", $row['fulltext']);
    $fullText = preg_replace($preg, "", $row['fulltext']);
    $fullText = str_replace($preg2, "", $row['fulltext']);
    $rows[] = array(
        'title' => $row['title'],
        'introtext' => utf8_encode($introText),
        'fulltext' => utf8_encode($fullText)
    );
}
//echo $fullText;
echo json_encode($rows);
mysqli_close($conn);
$preg2 viene eliminato senza problemi.
$preg invece no.
la cosa strana è che anche se provo a mettere la stringa per intero nn viene eliminato.
Registrato

Super
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 8


Mostra profilo E-mail
« Risposta #9 inserita:: Giugno 26, 2012, 01:57:50 pm »

E' normale, stai sovrascrivendo il contenuto delle variabili:

//Sostituisce $preg da $row e lo mette in $introText
$introText = preg_replace($preg, "", $row['fulltext']);
//Sostituisce $preg2 da $row e lo mette in $introText sovrascrivendone il contenuto che viene perso.
$introText = str_replace($preg2, "", $row['fulltext']);

Nella variabile $introText resta solo la sostituzione di preg2.

La soluzione è:
$introText = preg_replace($preg, "", $row['fulltext']);
$introText = str_replace($preg2, "", $introText );

Registrato
Super
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 8


Mostra profilo E-mail
« Risposta #10 inserita:: Giugno 26, 2012, 02:03:55 pm »

A questo punto se vuoi puoi usare una sola espressione regolare che ti elimina entrambe.

$preg = "@{codecitation[^\}]*\}@";
$introText = preg_replace($preg, "", $row['fulltext']);
Registrato
fermat85
Full Member
***

Karma: +4/-2
Scollegato Scollegato

Messaggi: 496


Mostra profilo WWW
« Risposta #11 inserita:: Giugno 26, 2012, 02:09:34 pm »

hai ragione.
ero talmente concentrato sul capire bene l'espressione regolare che nn ho pensato che come avevo sovrascrivevo sempre il contenuto.
grazie milla per l'aiuto!!!!
Registrato

Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2011 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



Links to Page