1

私はBBcodeをHTMLに変換するためにいくつかのPHPを書いています。

このBBcodeを変換したいと思います:

[quote]
Hello World
[/quote]

次のように:

<blockquote>Hello World</blockquote>

これを実行するために使用しているpreg_replace関数は次のとおりです。

preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode);

これで必要なことはほぼすべて実行されますが、私の問題は、「HelloWorld」の前後から\ nを実行し、次のように生成することです。

<blockquote>
Hello World
</blockquote>

これを修正する方法はありますか?すべてが非常に高く評価されています。

4

3 に答える 3

1

この正規表現を試してください:

/\[quote\]\s*(.+?)\s*\[\/quote\]/s
于 2009-09-23T21:57:42.767 に答える
0

二重引用符の内側の円記号をエスケープする必要があります。「\[」の代わりに「\\[」が必要です。

于 2009-09-23T21:57:30.630 に答える
0

たとえば、文字列の関数を呼び出すために、' e' regex-modifierを使用する可能性があります。trim

マニュアルのそのページを引用する:

ePREG_REPLACE_EVAL
この修飾子が設定されpreg_replace() ている場合、置換文字列内の後方参照の通常の置換を実行し、それをPHPコードとして評価し、その結果を使用して検索文字列を置換します。一重引用符、二重引用符、円記号(\)、およびNULL 文字は、置換された円記号の円記号によってエスケープされます。

preg_replace()この修飾子のみを使用します。他のPCRE関数では無視されます。


たとえば、このコードは、あなたのコードとわずかに異なります。

$bbCode = <<<STR
[quote]
Hello World
[/quote]
STR;

$output = preg_replace("/\[quote\](.+?)\[\/quote\]/es", "'<blockquote>' . trim('\\1') . '</blockquote>'", $bbCode);
var_dump($output);

あなたに与えるだろう:

string '<blockquote>Hello World</blockquote>' (length=36)

つまり、trim関数は一致したものに対して呼び出されます。文字列の最初と最後にあるすべての空白が削除されることに注意してください。改行だけでなく、スペースや表もあります。

(たとえば、のマニュアルページのpreg_replace例4を見ることができます)
(この場合、追加する必要があるので、少しやり過ぎかもしれませんが、とにかく知っておくと便利です)

于 2009-09-23T22:00:01.280 に答える