精華區beta PHP 關於我們 聯絡資訊
我在做查詢功能,以空格分隔多個關鍵字,顯示出來將關鍵字上紅色 假設輸入: 衣服 褲子 鞋子 (沒有問題) 但是輸入: 衣服 e r 會出現問題,它會將第一次替換完畢的<span style='color:red'>衣服</span>,中的e、r, 再次替換造成錯誤 像這樣<span styl<span style='color:red'>e</span>='color:r<span style='color:red'>e</span>d'>衣服</span> 程式碼如下: //$search_array為輸入的關鍵字陣列 $patterns = array(); foreach ((array)$search_array as $value){ array_push($patterns,"/".$value."/"); } $replacements = array(); foreach ((array)$search_array as $value){ array_push($replacements,"<span style='color:red;'>".$value."</span>"); } $p_name=preg_replace($patterns, $replacements, $p_name); //$p_name為要查詢的字串 請問該怎麼改呢?? 謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.58.172.120
tyf99:改 pattern,<tag> 內部 attr 不處理 12/17 23:24
這個的正規表示有點難寫 我寫出最接近的是這樣,但好像還是差挺遠的:( array_push($patterns,"/(?!.*[(<span)])(".$value.")/"); 且$p_name遇到s、p、a、n會解析不正確 ※ 編輯: PTTLSboy 來自: 61.58.172.120 (12/18 22:56) ※ 編輯: PTTLSboy 來自: 61.58.172.120 (12/18 22:57) > -------------------------------------------------------------------------- < 作者: gpmm (銀色) 看板: PHP 標題: Re: [請益] 關鍵字上紅色的作法有錯誤,請問該怎麼改 時間: Wed Dec 19 00:01:06 2012 ※ 引述《PTTLSboy (阿銫)》之銘言: : 我在做查詢功能,以空格分隔多個關鍵字,顯示出來將關鍵字上紅色 : 假設輸入: : 衣服 褲子 鞋子 (沒有問題) : 但是輸入: : 衣服 e r : 會出現問題,它會將第一次替換完畢的<span style='color:red'>衣服</span>,中的e、r, : 再次替換造成錯誤 : 像這樣<span styl<span style='color:red'>e</span>='color:r<span : style='color:red'>e</span>d'>衣服</span> : 程式碼如下: : //$search_array為輸入的關鍵字陣列 : $patterns = array(); : foreach ((array)$search_array as $value){ : array_push($patterns,"/".$value."/"); : } : $replacements = array(); : foreach ((array)$search_array as $value){ : array_push($replacements,"<span style='color:red;'>".$value."</span>"); : } : $p_name=preg_replace($patterns, $replacements, $p_name); : //$p_name為要查詢的字串 : 請問該怎麼改呢?? 謝謝!! $patterns = '/(' . implode ('|', $search_array) . ')/i'; $res = preg_replace ( $patterns, "<span style='color:red;'>\1</span>", $p_name); 不確定是不是你要的結果, 另外,如果要用 regular expression,請小心外部進來的字元。 :Q -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.161.198.202
PTTLSboy:謝謝拉!是我要的結果~ \1要再補上一個斜線(\)才可以跑QQ 12/19 02:31
gpmm:喔對,忘記是 " 要跳脫 XD 12/19 02:38