想要使用 - PHP从字符串中查找和删除单词

时间:2012-01-13 13:07:00

标签: php regex string string-parsing

我特别需要从字符串中删除单词,但是当该单词具有点(。)字符时,我遇到了问题。

让我们看看这里是字符串和我迄今为止尝试过的内容?

$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.' 为什么这个。(点)不起作用? 请给我解决方案。

如果我能以任何其他方式删除这个词,pLease让我知道。 我只想删除没有字符集的词,因为' Ka'这个词会被删除,但是' Ka'不会从Kashish'中删除。 请帮帮我。

先谢谢

6 个答案:

答案 0 :(得分:1)

这是因为点可以匹配任何字符。

问题也在于\b确实与单词边界匹配,即单词字符后跟非单词字符的位置,或非单词字符后跟单词字符。但是,由于点不是单词字符,也不是空格,所以它不匹配。

也许你应该尝试一下:

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

答案 1 :(得分:1)

原因是\ b表示单词边界。即单词字符和非单词字符之间的边界。见http://www.regular-expressions.info/wordboundaries.html

句号“。”之间的界限。并且空格“”不是单词边界,因此模式匹配失败。都不是“。”也不是倒退的“。”将工作。您需要删除第二个“\ b”。

另外,“。”意思是“任何字符”,所以使用反斜杠的目的是“。”正如其他人所指出的那样,确保它只是一个完整的匹配。重新设计您的模式以便在没有第二个“\ b”的情况下工作时,这一点非常重要。

答案 2 :(得分:0)

你需要逃离点,即。而不是。

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

答案 3 :(得分:0)

也许这会按你想要的方式运作?

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

答案 4 :(得分:0)

这是一个基于前瞻性的正则表达式,适用于您的情况:

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

<强>输出:

string(17) " Hello  Kashish. "

答案 5 :(得分:-1)

rtrim用于从字符串右侧删除选定的字符。

以下是如何从句子末尾删除点的示例:

$result1=rtrim($result, '.');
echo $result1;