Cita:
Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, '', to be a valid callback in C:\xampp\htdocs\parser\clases\str_replace.class.ph p on line 45
Código PHP:
<?
class replacer {
private $subject;
private $insideTags=TRUE;
private $dictiorary;
private $asterix=FALSE;
private $search;
private $replacement;
function setSubject ($subject){
$this->subject = $subject;
}
function setSearch ($search){
$this->search = $search;
}
function setReplacements (array $replacement){ // voy a usar esta
$this->dictiorary[$this->search]=$replacement;
}
function setReplacement ($replacement){
$this->dictiorary[$this->search][]=$replacement;
}
function setAsterix(){
$this->asterix=TRUE;
}
private function take_one($arreglo){
return($arreglo[array_rand($arreglo)]);
}
function replace ($str){ // metodo que da inicio a los reemplazos
$str = strtolower($str);
$this->setSubject($str);
// ordeno el diccionario
sort($this->dictiorary);
$this->dictiorary = array_reverse ($this->dictiorary);
return preg_replace_callback("|[ \[.,;(]{0,}([\wáéíóúñÑ]+)[ \].,;)]{0,}|is","{$this->callback}",$str); // aisla palabras con delimitadores varios
}
private function callback ($matches){ // recibe y envia a procesar palabras individuales
$delimitada = $matches[0];
$word = $matches[1];
// algoritmo de reemplazo ////////
$wordAfer = word_replacer ($word);
if ($wordAfer=="") $wordAfer = $word;
////////////////////////////////////////////
return str_replace ($word,$wordAfer,$delimitada);
}
private function word_replacer ($str){
// si no hubiera reemplazo, reemplazo por ****
$out='';
if (array_key_exists($str,$this->dictiorary)){
$out = take_one ($this->dictiorary[$str]);
}
if ($this->asterix){
$out=str_repeat('*',strlen($str));
}
return ($out);
}
} # fin de clase
// $a = array_merge($more,$a);
?>
Código PHP:
<?php
Include "str_replace.class.php";
$str = "El mundo de los problemas";
$todo = file_get_contents ("../reemplazos.txt");
$lineas = preg_split("/[\r\n]+/",$todo); // lineas
$reemplazo = new replacer();
$reemplazo->setAsterix();
foreach ($lineas as $linea){
$words = (explode (',',$linea));
$a = $words[0]; // palabra a buscar
$reemplazo->setSearch($a);
$reemplazos = array();
for ($i=1;$i<count($words);$i++){
$array_reemplazos[]= $words[$i]; // reemplazos
}
$reemplazo->setReplacement( $array_reemplazos);
}
echo $reemplazo->replace($str);
?>
Cita:
La linea problematica es la que dice:mundo,planeta
problemas,dificultades,dolores de cabeza
problemas,dificultades,dolores de cabeza
Código PHP:
return preg_replace_callback("|[ \[.,;(]{0,}([\wáéíóúñÑ]+)[ \].,;)]{0,}|is","{$this->callback}",$str);
[ GRACIAS ]