Ich bin ein Telegramm Bietet in PHP zu entwickeln, wo ich Strings zu handhaben, in denen nur einige basic HTML tag are allowed und all <
, >
und &
Symbole, die nicht Teil eines Tags oder eine HTML sind Unternehmen müssen mit den entsprechenden HTML-Entitäten (<
mit <
, >
mit >
und &
mit &
)
Beispiel stringPHP Regex negative Lookbehind variabler Länge Alternative Ausgabe
<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<
ersetzt ich es geschafft,zu ersetzen 0 und <
mit Regex. Zum Beispiel habe ich negative Lookahead in diesem Muster verwendet <(?!(?:(?:\/?)(?:(?:b>)|(?:strong>)|(?:i>)|(?:em>)|(?:code>)|(?:pre>)|(?:a(?:[^>]+?)?>))))
<
Symbol loszuwerden.
Aber ich bin nicht in der Lage, ein Muster zu erstellen, um >
Symbol zu ersetzen, das kein Teil eines Tags ist. PCRE unterstützt keine unbestimmten Quantoren in Look-Hintern. Obwohl es Alternativen innerhalb von Lookbehinds erlaubt, unterschiedliche Längen zu haben, erfordert es jedoch, dass jede Alternative eine feste Länge hat.
Also habe ich versucht, dieses Muster zu verwenden (noch unvollständig) (?<!(?:(?:<b)|(?:<strong)|(?:<i)|(?:<em)|(?:<code)|(?:<pre>)|(?:<a)))>
, bei dem alle Alternativen Längen haben festgelegt, aber es sagt noch Compilation failed: lookbehind assertion is not fixed length
War eine gute Antwort für dich Kumpel. Lassen Sie, Comeback mit einer guten Regex-Lösung, aber sehen Sie, dass Sie bereits eine kurze Regex-Lösung markiert haben, die nie funktionieren wird. Leider kann ich meine Antwort nicht löschen. Ich werde es das nächste Mal besser wissen, wenn ich deinen Namen sehe. – sln