原です。

正規表現を細かい部品を組み合わせて書くことができたらいいなと
思っていました。

> まつもと ゆきひろです

> Regxpはもとの文字列を保持していますから,そんなに難しくはな
> いですけど,selectionはともかく(単純に/A|B/するだけで済むか

Regexp が元の文字列を保持しているとは知りませんでした。そんなら、
是非オペレータを!


> ら),concatenationはどういう風に定義しましょうか?
> 
>  a = /foo|bar/; b = /baz/
> 
> とすると
> 
>  a+b => /foo|barbaz/
> 
> としますか? なんか変な気もしますが.

これはもう間違いなく /(?:foo|bar)baz/ だと思います。

後、積(*)、商(/)もあるといいですけど、難しいですかね。
差し当たって、

/foo/ * /bar/ = /(?=bar)foo/
/foo/ / /bar/ = /(?!bar)foo/

で代用してしまうとか。「否定」は // / /foo/ と同値かな。


> それと正規表現オブジェ
> クトのもともとの文字列を取り出せればそれで済むような気もしな
> いではないですね.
> 
>   Regexp.compile(/../.orig_string + "$")
> 
> とか.でもorig_stringって名前はあんまりだなあ.

この際、思い切って to_s はどうですか。

まあ、さしあたって組み込みにしないでライブラリにしておく方が
安全かもしれませんね。