names=union
visibility=public
kind=defined

--- union(*pattern) -> Regexp

引数として与えた pattern を選択 | で連結し、Regexp として返します。
結果の Regexp は与えた pattern のどれかにマッチする場合にマッチするものになります。

  p Regexp.union(/a/, /b/, /c/) #=> /(?-mix:a)|(?-mix:b)|(?-mix:c)/

引数を一つだけ与える場合は、[[c:Array]] を与えても Regexp を生成します。
つまり、以下のように書くことができます。

  arr = [/a/, /b/, /c/]
  p Regexp.union(arr)  #=> /(?-mix:a)|(?-mix:b)|(?-mix:c)/
  # 1.8.7 より前は、以下のように書く必要があった
  p Regexp.union(*arr) #=> /(?-mix:a)|(?-mix:b)|(?-mix:c)/


pattern は Regexp または String で与えます。
String で与えた場合、それ自身と等しい文字列にマッチするものと解釈され、
エスケープされて結果の Regexp に組み込まれます。

  p Regexp.union("a", "?", "b") # => /a|\?|b/
  p Regexp.union(/a/, "*") # => /(?-mix:a)|\*/

引数をひとつも与えなかった場合、決してマッチしない Regexp を返します。

  p Regexp.union() # => /(?!)/

結果の Regexp が対応する文字コードは引数として与えた Regexp が扱う文字コードに
一致します。
固定コードに対してコンパイルされている Regexp を複数与える場合、
それらのコードは一致していなければなりません。
異なる固定コードに対してコンパイルされている Regexp が存在する場合、
[[c:ArgumentError]] が発生します。

  p Regexp.union(/a/e, /b/e) # => /(?-mix:a)|(?-mix:b)/e
  p Regexp.union(/a/e, /b/s) # => ArgumentError

コードが固定されている Regexp とコードが固定されていない Regexp を混ぜた場合、
結果の Regexp は固定されているコードに対応するものになります。

  p Regexp.union(/a/e, /b/) # => /(?-mix:a)|(?-mix:b)/e

@param pattern | で連結したい正規表現を指定します


  # オプションは合成されない
  p Regexp.union(/foo/i, /bar/x, /hoge/m) #=> /(?i-mx:foo)|(?x-mi:bar)|(?m-ix:hoge)/

  # 文字列そのものにマッチする
  rep1 = [ "foo", "bar", "hoge"] 
  p Regexp.union(*rep1) #=> /foo|bar|hoge/
  p Regexp.union(rep1)  #=> /foo|bar|hoge/

  # 下記の場合オプションがつくのは最初だけ
  rep2 = [ /foo/x, "bar", "hoge"] 
  p Regexp.union(*rep2) #=> /(?x-mi:foo)|bar|hoge/
  p Regexp.union(rep2)  #=> /(?x-mi:foo)|bar|hoge/



