我正在PHP中開發一個Telegram Bot,我必須處理字符串,其中只有一些basic HTML tag are allowed和所有<
,>
和&
符號不是標記或HTML的一部分實體必須與相應的HTML實體(<
與<
,>
與>
和&
與&
)
例字符串PHP正則表達式負面lookbehind可變長度的替代方案問題
<b>bold</b>, <strong>bold</strong>
<i>italic</i>, <em>italic</em>
<a href="http://www.example.com/" >inline URL</a>
<code>inline fixed-width code</code>
<pre>pre-formatted fixed-width code block</pre>
yes<b bad<>b> <bad& hi>;<strong >b<a<
我設法取代被替換0和<
通過使用正則表達式。例如,我在這種模式<(?!(?:(?:\/?)(?:(?:b>)|(?:strong>)|(?:i>)|(?:em>)|(?:code>)|(?:pre>)|(?:a(?:[^>]+?)?>))))
中使用負向視圖來擺脫<
符號。
但我無法建立一個模式來取代>
符號,它不是任何標籤的一部分。 PCRE不支持不確定的量詞。雖然它允許lookbehinds內部的替代品具有不同的長度,但要求每個替代品具有固定的長度。
所以,我試圖用這種模式(仍然是不完整)(?<!(?:(?:<b)|(?:<strong)|(?:<i)|(?:<em)|(?:<code)|(?:<pre>)|(?:<a)))>
在所有的選擇都有固定的長度,但它仍然說Compilation failed: lookbehind assertion is not fixed length
是會爲亞朋友做一個很好的答案。離開,迴歸一個好的正則表達式解決方案,但看到你已經標記了一個短暫的正則表達式解決方案,永遠不會工作。不幸的是,我無法抹去我的答案。當我看到你的名字時,我會更好地知道。 – sln