estoy usando expresiones regulares para buscar palabras individuales y las reemplazar por otra.
Tengo esta función que funciona bien siempre y cuando la palabra que queramos reemplazar no tengo un punto decimal al final.
Código:
// Busca una palabra completa y la sustituye por otra
// insensible minusculas y mayúsculas
// https://stackoverflow.com/questions/19317493/php-preg-replace-case-insensitive-match-with-case-sensitive-replacement
function preg_ireplace($data, $search, $replace) {
$data = preg_replace_callback('/\b'.$search.'\b/i', function($matches) use ($replace)
{
$i=0;
return join('', array_map(function($char) use ($matches, &$i)
{
//return ctype_lower($matches[0][$i++])?strtolower($char):strtoupper($char);
return $char;
}, str_split($replace)));
}, $data);
return $data;
}
// insensible minusculas y mayúsculas
// https://stackoverflow.com/questions/19317493/php-preg-replace-case-insensitive-match-with-case-sensitive-replacement
function preg_ireplace($data, $search, $replace) {
$data = preg_replace_callback('/\b'.$search.'\b/i', function($matches) use ($replace)
{
$i=0;
return join('', array_map(function($char) use ($matches, &$i)
{
//return ctype_lower($matches[0][$i++])?strtolower($char):strtoupper($char);
return $char;
}, str_split($replace)));
}, $data);
return $data;
}
mi código es
Código:
$cadena = 'p.e. castellano g. marig ab pul. 1a';
$text = Tools::preg_ireplace($cadena, 'P.E.', 'HOLA');
$text = Tools::preg_ireplace($cadena, 'casteLLano', '***');
echo '<br>'.$cadena;
echo '<br>'.$text;
$text = Tools::preg_ireplace($cadena, 'P.E.', 'HOLA');
$text = Tools::preg_ireplace($cadena, 'casteLLano', '***');
echo '<br>'.$cadena;
echo '<br>'.$text;
El resultado :
p.e. castellano g. marig ab pul. 1a
p.e. *** g. marig ab pul. 1a
Quiero que la palabra P.E. la interprete como palabra individual y no lo hace.
¿Alguien se le ocurre como hago que acepte el punto decimal?
Muchas gracias