Ben "<" ile "& lt" yerine "& gt" ile ">" ve istiyorum ama onlar dışarıda "
" ortaya çıkar ve " pre>" sadece. Bu mümkün mü?$newText = preg_replace('>', '>', $text);
Ben yukarıdaki gibi PHP preg_replace kullanarak olacaktır.
Eğer bir regex ile yapmak istiyorsanız, hile regex siz de değiştirmek istediğiniz şeyleri değiştirmek istemiyorum şeyler maç ve dinamik eşleşen ne bağlı olarak değiştirme hesaplamak yapmaktır.
$new_text = preg_replace_callback('%<|>|<pre>.*?</pre>%si', compute_replacement, $text);
function compute_replacement($groups) {
if ($groups[0] == '<') {
return '<';
} elseif ($groups[1] == '>') {
return '>';
} else {
return $groups[0];
}
}
Bir regex istedi, ama ben sadece bunu yapmak için gerçekten kirli bir fonksiyon yazdım, çünkü bu gerçekten bir cevap değildir:
<?php
$html = ' <pre>hello > <</pre>
> <
<pre></pre>';
function stringReplaceThing($str) {
$offset = 0;
$num = 0;
$preContents = array();
$length = strlen($str);
//copy string so can maintain offsets/positions in the first string after replacements are made
$str2=$str;
//get next position of <pre> tag
while (false !== ($startPos = stripos($str, '<pre>', $offset))) {
//the end of the opening <pre> tag
$startPos += 5;
//try to get closing tag
$endPos = stripos($str, '</pre>', $startPos);
if ($endPos === false) {
die('unclosed pre tag..');
}
$stringWithinPreTags = substr($str, $startPos, $endPos - $startPos);
//replace string within tags with some sort of token
if (strlen($stringWithinPreTags)) {
$token = "!!T{$num}!!";
$str2 = str_replace($stringWithinPreTags, $token, $str2);
$preContents[$token] = $stringWithinPreTags;
$num++;
}
$offset = $endPos + 5;
}
//do the actual replacement
$str2 = str_replace(array('>', '<'), array('>', '<'), $str2);
//put the contents of <pre></pre> blocks back in
$str2 = str_replace(array_keys($preContents), array_values($preContents), $str2);
return $str2;
}
print stringReplaceThing($html);
PHP'nin regex motoru negatif lookarounds yaparsa emin hazırlıksız değilim, ama ne diğer dillerde regex ilgilendiğiniz gibi görünecektir bulunuyor:
/(?<!(<pre>[^(<\/pre>)]*))XXX(?!(.*<\/pre>))/
(Nefes - I think Ben bu doğru var)
XXX "<" Desen nerede ya da ">"
nb. büyük olasılıkla çok daha basit bir desen var neler