2

ばかげた bbcode パーサーの場合、2 つの定義を 1 つに追加したかったのですが、元の定義は preg_replace に対して次のとおりでした。

'#\[s\](.*?)\[/s\]#si', '<strike>\\1</strike>'

[s]そして、これは機能します。ユーザーがその形式でテキストを使用または開始できるようにしたかった[strike]ので、当然、機能すると考えて次のようなものを追加しました。

'#\[(s|strike)\](.*?)\[/(s|strike)\]#si', '<strike>\\1</strike>'

残念ながら、それはあなたが期待するものではなく、[s]and [strike](適切に使用された) make:sstrike(私のマークダウンは、その実際の見た目の結果を示すために正しいです。その中に何があるかに関係なく、 s またはストライクが表示されます)

代わりに内部テキストをタグ名に置き換えるのはなぜですか? s|strike の周りに括弧を追加することは問題ですか? 私はおそらくこれをすべて間違ってやっています..

4

1 に答える 1

3

(s|strike)問題は、開始タグと終了タグに 2 つの新しい正規表現グループを追加したことです(s|strike)sしたがって、結果のコード内では、またはが得られますstrike。正しいグループ番号を使用するだけで修正できます2

別の方法は、先頭に a を追加して、新しいグループを非参照にすること?:ですが、最初の解決策の方が理解しやすいと思います。

#\[(?:s|strike)\](.*?)\[/(?:s|strike)\]#si
于 2010-11-22T11:42:10.880 に答える