基本的に私がやろうとしているのは、正規表現を使用せずに一種の BB コード システムを作成することです。以下で使用しているコードは、そうではありませんが、完全に機能するようです。基本的に、コードは文字列を受け取り、すべての [code][/code] ブロック内からすべてのブレーク タグを削除し、それを文字列全体に置き換えることになっています。次に、コードは [code][/code] タグを、使用している SyntaxHighlighter スクリプトの「pre」タグに変換することになっています。
残念ながら、コードは 100% 完全に機能するわけではありません。場合によっては、[code][/code] ブロック内にブレーク タグが残ることがあります。私のコードは次のとおりです。
<?php
$string = "Hello\n[code]\nCode One\n[/code]\n[code]\nCode Two\n[/code]\n[code]\nCode Three\n[/code]";
$string = nl2br($string);
$openArray = array();
$closeArray = array();
$original = "";
$newString = "";
$i = 0;
if(strpos($string, "[code]") === 0) {
array_push($openArray, 0);
}
while($i = strpos($string, "[code]", $i + 1)) {
array_push($openArray, $i);
}
while($i = strpos($string, "[/code]", $i + 1)) {
array_push($closeArray, $i + 7);
}
for($j = 0; $j < count($openArray); $j++) {
$length = $closeArray[$j] - $openArray[$j];
$original = substr($string, $openArray[$j], $length);
$newString = strip_tags($original);
$string = str_replace($original, $newString, $string);
}
$string = str_replace("[code]", '<pre class="brush: plain">', $string);
$string = str_replace("[/code]", '</pre>', $string);
echo $string;
?>
かなり長い間これの何が問題なのか疑問に思っていて、さまざまな方法を試してきたので、すべての回答は大歓迎です!