0

preg_replace関数に問題があります。BBコードをHTMLに変換しようとしていますが、機能しません。私が仕事に取り掛かろうとしているのは[size=200:37pfziz0][TEXT][/size:37pfziz0] (なぜそれらの数字がそこに表示されるのかわからないが、それらを考慮に入れる必要がある。だから私はやろうとしている[size=(1):(2)](3)[/size:(4)]

eregiとpregの両方で試してみましたが、どちらも機能しないようです。

$txt = eregi_replace("\\[size=([^\\[]+):([^\\[]+)\\]([^\\[]*)\\[/size:([^\\[]+)\\]", "<font size=\"\\1\%\">\\3</font>", $txt);
$txt = preg_replace("#\[size\=(.*?):(.*?)\](.*?)\[/size:(.*?)\]#is", "<font size=\"\\1\%\">\\3</font>", $txt);

誰かが私が間違っていることを教えてもらえますか?私は見積もりを行うのに約1時間費やしましたが、最終的にはこの方法を使用してうまくいきました。

$txt = preg_replace("#\[quote\=(.*?):(.*?)\](.*?)\[/quote:(.*?)\]#is", "<blockquote>Quote by: \\1<br/>\\3</blockquote>", $txt);
4

1 に答える 1

1

さて、あなたの例のbbcodeがそれを少し難しくしたことを考えると、少しテストした後、これが私が思いついたものです:

preg_replace( '/\[size=([^\]\:]+)\:([^\]]+)\](.*?)\[\/size\:([^\]]+)\]/is', '<font size="$1%">$3</font>', $text);

これに関する小さなメモ:あなたが例を挙げたように、私はその間のものを一致させるため[text]に使用したコードの間にあります。(.*?)タグの間に角かっこを入れる必要がない場合は、これを変更することをお勧めします。

おそらくお分かりのように、正規表現を使用するときは自分の習慣があります。まず/、文字をエスケープする方が少し簡単だと思うので、常に区切り文字として使用しています。次に、一致を単純にするためにドル記号を使用し、スラッシュが多すぎないようにします。

于 2012-08-29T21:21:08.367 に答える