[英]Complex PHP/Perl regular expression for emoticons
我已經檢查了谷歌這個主題的幫助,但所有答案都忽略了替換方法中的致命缺陷。
基本上我有一組表情符號,例如:) LocK:eek等等,需要用圖像標簽替換它們。 我遇到的問題是確定一個特定的表情符號不是一個單詞的一部分而且單獨就行了。 例如,在我們的網站上,我們允許“快速鏈接”不包含在笑臉替換中,格式為go:forum,user:Username等。 幾乎我讀過的所有答案都不允許這種可能性,因此打破這些鏈接(即去<img src =“image.gif”/> orum)。 我試過用不同的方法來解決這個問題,以檢查線的起點,空格/換行符等等,但我沒有太多運氣。
任何有關此問題的幫助將不勝感激。 哦,我也使用PHP 5和preg_%函數。
謝謝,Rupert S.
編輯18/04/2011:
謝謝你的幫助偷看:)已經創建了最終的正則表達式我雖然我與大家分享,有一些問題與特殊的空間字符包括換行,但它現在像一個夢想最終的正則表達式是:
(?<= \\ s | \\ A | \\ n | \\ r | \\ t | \\ v | \\ <br \\ / \\> | \\ <br \\>)(:S)(?= \\ s | \\ Z | $ | \\ n | \\ r | \\ t | \\ v | \\ <br \\\\ \\> | \\ <br \\>)
要完成對答案的評論:最簡單的解決方法是聲明表情符號總是被空格包圍。
(?<=\s|^)[<:-}]+(?=\s|$)
\\s
涵蓋正常空格和換行符。 只是為了安全^
和$
覆蓋文本主題的開頭或結尾處的出現。 斷言本身不匹配,因此可以在替換字符串/回調中忽略。
如果你想在一個preg_replace中做所有替換,試試這個:
preg_replace('/(?<=^|\s)(:\)|:eek)(?=$|\s)/e'
,"'$1'==':)'?'<img src=\"smile.gif\"/>':('$1'==':eek'?'<img src=\"eek.gif\"/>':'$1')"
,$input);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.