通过PHP查找段落中的字母

时间:2010-10-05 21:10:41

标签: php

假设我有这句话。

“狗带着孩子的骨头。”

使用PHP,我可以在我指定的句子(如果有的话)中找到特定的字母吗?

例如,我想找到字母g,t,h和e。

然后句子会显示为:

do g - t ook t h e kid's bon e

(抱歉格式化...)

查看某些字母是如何加粗的(以某种方式突出显示)。它们来自我想要的g,t,h和e组合。有没有办法在PHP中执行此操作?

另外,我忘了提到一旦找到一封信......它就不能再用粗体了。因此,如果我正在寻找 t * 并且字母t不止一次出现......它只会突出显示一个(第一个)...除非我指定找到多个t。

2 个答案:

答案 0 :(得分:2)

一个有点优雅的解决方案可能是:

$letters = array('/a/', '/p/', '/l/');// combo
$sentence = "The rain in Spain stays mainly on the lane.";
$sentence = preg_replace($letters, '<b>$0</b>', $sentence, 1);

查看preg_replace文档,了解有关其工作原理的详细信息。


正如我所说,这是一个优雅的解决方案。这个有用;),但它不漂亮。

$letters = array('s', 'p', 'a', 'l', 'l', 'b');// combo
$sentence = "The rain in Spain stays mainly on the big lane.";
foreach($letters as $letter){
    $sentence = preg_replace('/(?<![\>\<\/])'.$letter.'|(?<=\<\/b\>)'.$letter.'/i', '<b>$0</b>', $sentence, 1);
}
echo $sentence;

答案 1 :(得分:1)

你有什么理由不能使用简单的搜索和替换吗?

$string = str_replace(array('g', 't', 'h', 'e'), array('<b>g</b>', '<b>t</b>', '<b>h</b>', '<b>e</b>'), $string);

或使用正则表达式:

$string = preg_replace('/([gthe])/i', '<b>\\1</b>', $string);

编辑:好的,你在问题中添加了一些内容。 preg_replace有一个限制参数,因此您可以执行以下操作:

$string = preg_replace('/(g)/i', '<b>\\1</b>', $string, 1);

只是替换第一次出现的'g'。如果你有多个字符串(可能有更好的方法),你需要在循环中执行此操作,并注意不要替换&lt; b&gt;的'b'。如果这恰好是你的一封信。