我特别需要从字符串中删除单词,但是当该单词具有点(。)字符时,我遇到了问题。
让我们看看这里是字符串和我迄今为止尝试过的内容?
$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'中删除。 请帮帮我。
先谢谢
答案 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)