這是一個問題,我已經想出瞭如何解決,但我想以一種更簡單的方式解決它...我試圖改進爲程序員。PHP:在字符串中加入重疊關鍵字的缺點
已經做了我的研究,並沒有找到一個優雅解決以下問題:
我有一個關鍵字假設陣列搜索:
$keyword_array = array('he','heather');
和假設的字符串:
$text = "What did he say to heather?";
最後,一個假設的功能:
function bold_keywords($text, $keyword_array)
{
$pattern = array();
$replace = array();
foreach($keyword_array as $keyword)
{
$pattern[] = "/($keyword)/is";
$replace[] = "<b>$1</b>";
}
$text = preg_replace($pattern, $replace, $text);
return $text;
}
功能(不是太奇怪的)這樣的事返回:
"What did <b>he</b> say to <b>he</b>ather?"
因爲它是不承認「海瑟」時,有在它的中間有一個大膽的標籤。
我想最終的解決方案做的是,儘可能簡單,返回以下兩個字符串之一:
"What did <b>he</b> say to <b>heather</b>?"
"What did <b>he</b> say to <b><b>he</b>ather</b>?"
最後的一些條件:
- 我想最後的解決方案處理大量可能的關鍵字
- 我希望它能處理以下兩種情況(線表示重疊字符串):
一個字符串吞噬其他的,像下面的兩個例子:
- 他,石楠
- 打磨,並
或者一個字符串不不吞噬其他:
- 夾帶,培訓
可能的方法來解決:
-A REG當然,無視在關鍵字標籤
- 長的方式(即我試圖避免):
*爲每個關鍵字出現的所有搜索字符串,存儲關鍵字的位置的數組(開始和結束)是粗體
*處理這個數組遞歸結合重疊的關鍵字,所以沒有冗餘
*添加粗體標記(從字符串的末端開始,以避免將信息從所述其他字符移位位置)
非常感謝提前!
謝謝您的回答。這看起來好像適用於特定的情況,但不喜歡在我提到的所有情況下都能正常工作。例如:$ keyword_array = array('heat','ather')。 –
@Nathan假設您正在嘗試構建一個真實世界的應用程序:您是否知道在嵌套或聯鎖粗體標記中沒有Point? – vzwick
@vzwick:我同意這不是一個好習慣......但是我認爲大多數瀏覽器都不會「窒息」它......我只是在Firefox和Chrome上測試了一個例子,它似乎工作正常。 –