cvs:lib/init.php で定義されている注釈の正規表現
$NotePattern = '/\(\(((?:(?>(?:(?!\(\()(?!\)\)(?:[^\)]|$)).)+)|(?R))*)\)\)/ex';
cvs:lib/make_link.php で定義されている注釈の正規表現
\(\( ((?:(?R)|(?!\)\)).)*) # (1) note body \)\)
注釈の入れ子の場合を除き、閉じ丸括弧が3文字以上並んだ場合の判断として、 前者では余った括弧を注釈の内側にある文字列と見なすのに対し、 後者では注釈の外側にある文字列と見なして解釈しています。
この定義の揺れによる影響が、以下に示すごく限られた状況においてですが確認できます。
#contents *test1((note)))testA *test2((note))testB *test3)testC
見出し文字列に閉じ括弧が余分な注釈が存在し、さらに目次を作成するというものです。 サンプルはこちら。
目次から注釈を取り除くのには前者の定義が用いられますが、それ以外の本文や注釈文を構成するのには主に後者が用いられます。そのため、目次では余分な閉じ括弧が見られませんが、見出しではその余分な閉じ括弧を見ることができます。
@@ -364,7 +364,7 @@ $InterWikiName = '(\[\[)?((?:(?!\s|:|\]\]).)+):(.+)(?(1)\]\])'; // 注釈 -$NotePattern = '/\(\(((?:(?>(?:(?!\(\()(?!\)\)(?:[^\)]|$)).)+)|(?R))*)\)\)/ex'; +$NotePattern = '/\(\(((?:(?R)|(?!\)\)).)*)\)\)/ex'; ///////////////////////////////////////////////// // 初期設定(ユーザ定義ルール読み込み)