Pregunta

Tengo la necesidad especialmente de eliminar la palabra de la cadena, pero tengo un problema cuando esa palabra tiene puntos (.) Carácter.

Veamos aquí está la cadena y lo que he probado hasta ahora.

$result = 'Hello Ka Kashish.';
$result = preg_replace('/\bKa\b/i', '', $result);

Obtendré el resultado esperado 'Hello Kashish.'

Pero si la cadena es como a continuación, no funciona

$result = 'Hello Ka. Kashish.';
$result = preg_replace('/\bKa.\b/i', '', $result);

Me da resultado 'Hello Ka. Kashish.'¿Por qué esto (Dot) no funciona? Por favor dame solución.

Y si puedo lograr esta eliminación de palabras de alguna otra manera, hágamelo saber. Quiero eliminar solo la palabra que no se ajuste a la palabra, ya que se eliminará la palabra 'ka', pero 'ka' no se eliminará de 'kashish'. Por favor, ayúdame.

Gracias de antemano

¿Fue útil?

Solución

Esto se debe a que el punto puede coincidir con cualquier personaje.

El problema también es que \b Realmente coincide con una frontera de palabras, es decir, una posición en la que un personaje de una palabra es seguido por un carácter sin palabra, o un carácter de no palabra es seguido por un carácter de palabra. Pero como un punto no es un personaje de palabra y tampoco es un espacio para el caso, no coincidirá.

Tal vez deberías intentarlo en su lugar:

preg_replace('/\bKa(\W|$)/i', '', $result)

Otros consejos

La razón es que b representa un límite de palabras. Es decir, un límite entre un personaje de palabra y un personaje no palabras. Ver http://www.regular-expressions.info/wordboundaces.html

El límite entre una parada completa "." y un espacio "" no es un límite de palabras, por lo que la coincidencia de patrón falla. Ninguno de los dos "." ni un brote ".". trabajará. Debe eliminar el segundo " B".

Por separado, "." significa "cualquier carácter", por lo que el propósito de usar back-slash ". es asegurarse de que coincida solo con una parada completa, como otros han señalado. Es importante tener en cuenta al rediseñar su patrón para que funcione sin el segundo " B".

Necesitas escapar del punto, es decir. en vez de .

preg_replace('/\bKa\.\b/i', '', $result); 

¿Quizás esto funcione de la manera que quieras?

preg_replace('/\bKa[\.]?(\s|$)/i', '', $result);

Aquí hay un Regex basado en LookAhead que funcionará para su caso:

$result = 'Ka. Hello Ka. Kashish. Ka.';
$result = preg_replace('/(?<=\b)Ka\.(?=(\W|$))/i', '', $result);

PRODUCCIÓN:

string(17) " Hello  Kashish. "

rtrim se usa para eliminar los caracteres seleccionados del lado derecho de la cadena.

Aquí hay un ejemplo de cómo eliminar el DOT del final de la oración:

$result1=rtrim($result, '.');
echo $result1;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top