'[]'の中で']'をマッチさせたい場合

久しぶりにxyzzyの放置していたWikiとかをチェックして色々と修正した方がいい所を修正したり凍結したりしてみた。ついでに物凄い久しぶりに2chxyzzyスレ見たら相変わらずだった。もしや、2chxyzzyスレは時間が動いていないんじゃないだろうかと疑わんばかりの相変わらずだった。

217 名無し~3.EXE sage 2016/05/29(日) 05:58:14.13 KlZAGzRM

正規表現の文字クラス中で ] にマッチさせたくて
[\]] などとしても ] にマッチしないんですがどうやるんですか?
218 名無し~3.EXE sage 2016/05/29(日) 07:06:52.39 D16LO6aD

\\] とか \\\] とか \\\\\\] とか \\\\\\\] とか…
219 名無し~3.EXE sage 2016/05/29(日) 08:37:10.37 s94TGrD9

>>217
[[]
220 名無し~3.EXE sage 2016/05/29(日) 08:40:02.09 s94TGrD9

間違えた
[]]
221 名無し~3.EXE sage 2016/05/30(月) 07:12:35.64 YWYIq2Z7

>>220
まさかエスケープ不要とは…と思ったけど他の文字も入れるとマッチしないな
(string-match "[]]" "]") -> 0
(string-match "[A]]" "]") -> nil
(string-match "[A\\]]" "]") -> nil
どうなってるんだ…
222 名無し~3.EXE sage 2016/05/30(月) 07:20:46.82 YWYIq2Z7

あ、空の[]の後の]にマッチしてるだけか
223 名無し~3.EXE 2016/05/30(月) 07:47:29.45 4EQ3IST1

`]' を文字集合の中に含むには、それを最初の文字としなくてはいけませ
ん。例えば、`[]a]' は `]' か `a' にマッチします。

参考: GNU Emacs Lisp Reference Manual - 正規表現のシンタックス
http://flex.phys.tohoku.ac.jp/texi/eljman/eljman_218.html

xyzzyの正規表現はEmacsに倣ってるっぽいから、上記のページ見とくといいよ。
`]' を文字集合の中に含むには、それを最初の文字としなくてはいけませ
ん。例えば、`[]a]' は `]' か `a' にマッチします。 

]の話は上のを考慮すると

(string-match "[]a]" "]") -> 0
(string-match "[a]]" "]") -> nil

'[]'内で使うには初めに']'を指定すればいいってことみたいだな

(string-match "[]]" "]") -> 0

これも、一応初めに指定しているという扱いになるんだろうね。
何もなしだとこんなのが出た

(string-match "[]" "]") -> ‘[’に対応する‘]’がありません

なるほどねぇ。