i using wordpress plugin named acronyms (https://wordpress.org/plugins/acronyms/). plugin replaces acronyms description. uses php preg_replace function.
the issue replaces acronyms contained in <pre>
tag, use present source code.
could modify expression won't replace acronyms contained inside <pre>
tags (not directly, in moment)? possible?
the php code is:
$text = preg_replace( "|(?!<[^<>]*?)(?<![?.&])\b$acronym\b(?!:)(?![^<>]*?>)|msu" , "<acronym title=\"$fulltext\">$acronym</acronym>" , $text );
you can use pcre skip/fail regex trick (also works in php) tell regex engine match if not inside delimiters:
(?s)<pre[^<]*>.*?<\/pre>(*skip)(*f)|\b$acronym\b
this means: skip substrings starting <pre>
, ending </pre>
, , match $acronym
whole word.
here sample php demo:
<?php $acronym = "ascii"; $fulltext = "american standard code information interchange"; $re = "/(?s)<pre[^<]*>.*?<\\/pre>(*skip)(*f)|\\b$acronym\\b/"; $str = "<pre>ascii\nsometext\nmoretext</pre>more text \nascii\nmore text<pre>more\nlines\nascii\nlines</pre>"; $subst = "<acronym title=\"$fulltext\">$acronym</acronym>"; $result = preg_replace($re, $subst, $str); echo $result;
output:
<pre>ascii</pre><acronym title="american standard code information interchange">ascii</acronym><pre>ascii</pre>
Comments
Post a Comment