我正在嘗試將自動標記檢測和轉換爲超鏈接。問題是,它有這個字符串是通過以下運行之後進行:不包含某些字符的匹配字符串
htmlspecialchars($string, ENT_QUOTES, "UTF-8");
現在,即'
符號變成'
。這些標籤的形式是#[a-Z0-9\-\_]
因此,由於#39
部分,腳本將編碼的特殊字符視爲標籤。
我如何與preg_match
相匹配那麼它不會考慮#
標記之前是&
標記爲標記?
謝謝!
我正在嘗試將自動標記檢測和轉換爲超鏈接。問題是,它有這個字符串是通過以下運行之後進行:不包含某些字符的匹配字符串
htmlspecialchars($string, ENT_QUOTES, "UTF-8");
現在,即'
符號變成'
。這些標籤的形式是#[a-Z0-9\-\_]
因此,由於#39
部分,腳本將編碼的特殊字符視爲標籤。
我如何與preg_match
相匹配那麼它不會考慮#
標記之前是&
標記爲標記?
謝謝!
工作就像一個魅力!總是有新東西來學習:) – FinDev
你必須使用一個lookbehind assertion檢查該字符串前面沒有&
:
試試這個:
"/(?<!&)#[\w-]+/"
的(?<!&)
原因#
只有當它是相匹配之前沒有&
。
的\w
部分匹配[a-zA-Z0-9_]
您可能還需要檢查標籤由一個空格前面或者是字符串的開頭:
"/(:?^|\s)#[\w-]+/"
這裏有一個教程:HTTP:// www.phpro.org/tutorials/Introduction-to-PHP-Regex.html#11 – JRL
請記住,「&」可能是網址的一部分。 Htmlspecialchars()將「&」更改爲「&」,因此後面的後續建議仍然可以可靠地工作,但是url匹配會更復雜。也許倒過htmlspecialchars更簡單,做你的事,然後重做htmlspecialchars(如果你不能在htmlspecialchars之前得到它)。 –