2012-02-18 6 views
11

Quiero quitar palabras enteras de una cadena, estén donde estén dentro de la cadena.Elimine palabras específicas de la cadena

I han creado una matriz de palabras prohibidas:

$wordlist = array("or", "and", "where", ...) 

Ahora me tira las palabras:

foreach($wordlist as $word) 
$string = str_replace($word, "", $string); 

El problema es que el código anterior también tiras de palabras que contienen las palabras prohibidas como " arena "o" más ".

+2

Pro-tip : str_replace puede tomar una matriz, por lo que puede hacer 'str_replace ($ lista de palabras, '', $ cadena)'. – cmbuckley

Respuesta

17

Para ello se puede utilizar preg_replace y límites de palabras:

$wordlist = array("or", "and", "where"); 

foreach ($wordlist as &$word) { 
    $word = '/\b' . preg_quote($word, '/') . '\b/'; 
} 

$string = preg_replace($wordlist, '', $string); 

EDIT: Example.

1

TRY:

$string = preg_replace("\b$word\b", "", $string); 
+0

Parece que esta dosificación no está funcionando. Lanzar "Delimitador no debe ser alfanumérico o barra invertida" –

4

El str_replace también es compatible con la entrada de una matriz. Esto significa que se podría utilizar de la siguiente manera:

str_replace(array("word1", "word2"), "", $string); 

Esto significa que todas las palabras existentes en la matriz serán sustituidos por una cadena vacía. Si desea reemplazos específicos, puede crear una serie de reemplazos también.

Para eliminar las palabras correctas en su configuración, le aconsejo agregar espacios alrededor de "o" y "dónde". Como solo eliminarías las palabras reales y no partes de palabras.

Espero que esto ayude.

+0

La idea de espacios es simple y probablemente funcionaría en este caso dado que las palabras se reemplazan, pero en general podría presentar un problema al principio y al final de una cadena. – cmbuckley

+1

Pero esto no resuelve el problema dado: 'también elimina las palabras que contienen las palabras prohibidas como" arena "o" más ".' –

+2

@NomikOS lee la segunda mitad de la publicación. – cmbuckley

0
$areaname = str_replace(array("to", "the","a","an","in","by","but","are","is","had","have","has"),'',$areaname); 

lo utilicé para esto y funciona bien

pero va a agregar espacios en lugar de estas palabras, por lo que es necesario utilizar sustituir de nuevo a chk espacios dobles y les quite

Cuestiones relacionadas