Хотите найти и удалить слово только из строки, используя - PHP - PullRequest
2 голосов
/ 13 января 2012

У меня есть особая необходимость в удалении слова из строки, но у меня проблема, когда у этого слова есть точка (.).

Давайте посмотрим, что здесь за строка и что я пробовал до сих пор?

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

Я получу ожидаемый результат 'Hello Kashish.'

Но если строка похожа на приведенную ниже, она не работает

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

Это дает мне результат 'Hello Ka. Kashish.'Почему это. (Точка) не работает?Пожалуйста, дайте мне решение.

И если я смогу добиться удаления этого слова любым другим способом, пожалуйста, дайте мне знать.Я хочу удалить только слово, а не набор символов, так как слово «Ка» будет удалено, но «Ка» не будет удалено из «Кашиш».Пожалуйста, помогите мне.

Заранее спасибо

Ответы [ 6 ]

1 голос
/ 13 января 2012

Причина в том, что \ b представляет границу слова.Т.е. граница между символом слова и символом не словом.См. http://www.regular -expressions.info / wordboundaries.html

Граница между полной остановкой "."и пробел "" не является границей слова, поэтому сопоставление с образцом завершается неудачно.Ни один "."ни с косой чертой "."буду работать.Вам нужно удалить второй "\ b".

Отдельно "."означает "любой символ", поэтому цель использования обратной косой черты "."чтобы убедиться, что это соответствует только полной остановке, как указали другие.Это важно отметить при перепроектировании шаблона для работы без второго «\ b».

1 голос
/ 13 января 2012

Это потому, что точка может соответствовать любому символу.

Проблема также состоит в том, что \b действительно соответствует границе слова, то есть позиции, где за символом слова следует символ, не являющийся словом,или за несловесным символом следует символ слова.Но поскольку точка не является символом слова и не является пробелом в этом отношении, она не будет совпадать.

Возможно, вам следует попробовать это вместо этого:

preg_replace('/\bKa(\W|$)/i', '', $result)
0 голосов
/ 01 июля 2015

rtrim используется для удаления выбранных символов с правой стороны строки.

Вот пример того, как убрать точку в конце предложения:

$result1=rtrim($result, '.');
echo $result1;
0 голосов
/ 13 января 2012

Вот регулярное выражение на основе упреждения, которое будет работать для вашего случая:

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

ВЫХОД:

string(17) " Hello  Kashish. "
0 голосов
/ 13 января 2012

возможно, это будет работать так, как вы хотите?

preg_replace('/\bKa[\.]?(\s|$)/i', '', $result);
0 голосов
/ 13 января 2012

Вам нужно уйти от точки, т.е.вместо.

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