質問: 正規表現(Ruby)で ``` ^ISBN[-]?[¥d|-]+ ``` の場合 ``` ^ISBN-?[¥d|-]+ ``` でも同じ結果になると思うのですが この場合の`[]`って、`[]`内に指定された文字のどれかにマッチするの意味の`[]`でクラスとかの`[]`とはまた違いますよね
回答: はい、Ruby の正規表現 `[-]` は `-` 1文字にマッチする表現であり、正規表現 `-` と同等です。 Ruby 2.5 のドキュメント (これやこれ) に明示的に書かれているわけではありませんが、`[ ]` の中のハイフンは `[a-z]` のように範囲を表すときのみメタ文字として扱われます。先頭にあるときなど、範囲を表さないときはバックスラッシュによるエスケープ無しでも非メタ文字として扱われます。 たとえば `-abc]` という正規表現は、`-`, `a`, `b`, `c` にマッチします (実行例: [Rubular / Wandbox)。 参考ブログ: 正規表現: 文字クラス [ ] 内でエスケープしなくてもよい記号 -- Tech Racho