我正在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