2012-09-13 39 views
0

我一直在使用Sphider搜索引擎作爲內部網站,我們需要能夠在導出的.htm(l)文件中快速搜索聯繫人詳細信息。preg_replace限制問題,處理數組值

$fulltxt = ereg_replace("[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(\.[A-Za-z]{2,3})", "<a href=\"mailto:\\0\">\\0</a>", $fulltxt); 

我有一個方便的mailto更換電子郵件地址:鏈接,使用戶可以從搜索結果中直接打開Outlook。

然而,

while (preg_match("/[^\>](".$change.")[^\<]/i", " ".$fulltxt." ", $regs)) { 
    $fulltxt = preg_replace("/".$regs[1]."/i", "<b>".$regs[1]."</b>", $fulltxt); 
    } 

它取代了大膽的標籤的搜索結果,這resuts到標籤的所有比賽被列入Outlook的「到...」字段。它看起來在HTML這樣的事情(感謝尤里):

<a href="mailto:<b>name</b>[email protected]"><b>name</b>[email protected]</a> 

我已經嘗試添加一個值到「限價」參數:

while (preg_match("/[^\>](".$change.")[^\<]/i", " ".$fulltxt." ", $regs)) { 
    $fulltxt = preg_replace("/".$regs[1]."/i", "<b>".$regs[1]."</b>", $fulltxt, 1); 
    } 

Supposingly這應該是解決我的問題通過簡單地只替換第一次出現(作爲模式的名稱是名稱電話號碼電子郵件和我們總是搜索名稱),而只是使它非常慢,我從服務器收到超時消息的點。我一直在嘗試各種解決方案,但運氣不好。

任何想法?難道我做錯了什麼?

謝謝。

(*原始大量編輯)。

回答

0

我理解你是否有這樣的事情發生?

<a href="mailto:<b>[email protected]</b>"><b>[email protected]</b></a> 

你爲什麼不把標籤到搜索結果第一,然後才適用「的mailto:」錨電子郵件?在第二步中,添加的將很容易被濾除。

+0

是的,這正是發生的情況。我嘗試更換後,它被標記,但然後它不匹配,例如,如果電子郵件是[email protected]它會這樣保羅。你是什麼意思添加還有,我想在HTML mailto代碼中包含一段PHP strip_tags代碼,但是它打印爲純文本,因此無法將其視爲PHP。 – Than9000

+0

因此,只有名稱位是粗體而不是整個電子郵件地址?它是不同的是,你基本上需要你的第二個「大膽的」正則表達式只發生在HTML標籤之外,下面是你的一個類似案例:http://stackoverflow.com/a/10539617/454266 – Yuriy

+0

沒關係,我把我的while()進入一個if(),並且每次進入只執行一次,並沒有完全解決我的問題,而是完成了目前的工作。但是,您的鏈接確實非常有用,並且可以幫助很多,因此我會接受您的答案,謝謝。 – Than9000