Blame doc/RE.ja

Packit Service bd74e6
鬼車 正規表現 Version 6.8.0    2018/04/13
Packit Service bd74e6
Packit Service bd74e6
使用文法: ONIG_SYNTAX_ONIGURUMA (既定値)
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
1. 基本要素
Packit Service bd74e6
Packit Service bd74e6
  \       退避修飾 (エスケープ)  正規表現記号の有効/無効の制御
Packit Service bd74e6
  |       選択子
Packit Service bd74e6
  (...)   式集合   (グループ)
Packit Service bd74e6
  [...]   文字集合 (文字クラス)
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
2. 文字
Packit Service bd74e6
Packit Service bd74e6
  \t              水平タブ         (0x09)
Packit Service bd74e6
  \v              垂直タブ         (0x0B)
Packit Service bd74e6
  \n              改行             (0x0A)
Packit Service bd74e6
  \r              復帰             (0x0D)
Packit Service bd74e6
  \b              後退空白         (0x08)
Packit Service bd74e6
  \f              改頁             (0x0C)
Packit Service bd74e6
  \a              鐘               (0x07)
Packit Service bd74e6
  \e              退避修飾         (0x1B)
Packit Service bd74e6
  \nnn            八進数表現        符号化バイト値(の一部)
Packit Service bd74e6
  \o{17777777777} 拡張八進数表現    コードポイント値
Packit Service bd74e6
  \uHHHH          拡張十六進数表現  コードポイント値
Packit Service bd74e6
  \xHH            十六進数表現      符号化バイト値(の一部)
Packit Service bd74e6
  \x{7HHHHHHH}    拡張十六進数表現  コードポイント値
Packit Service bd74e6
  \cx             制御文字表現      コードポイント値
Packit Service bd74e6
  \C-x            制御文字表現      コードポイント値
Packit Service bd74e6
  \M-x            超  (x|0x80)     コードポイント値
Packit Service bd74e6
  \M-\C-x         超 + 制御文字表現 コードポイント値
Packit Service bd74e6
Packit Service bd74e6
  ※ \bは、文字集合内でのみ有効
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
3. 文字種
Packit Service bd74e6
Packit Service bd74e6
  .        任意文字 (改行を除く: オプションに依存)
Packit Service bd74e6
Packit Service bd74e6
  \w       単語構成文字
Packit Service bd74e6
Packit Service bd74e6
           Unicode以外の場合:
Packit Service bd74e6
             英数字, "_" および 多バイト文字。
Packit Service bd74e6
Packit Service bd74e6
           Unicodeの場合:
Packit Service bd74e6
             General_Category -- (Letter|Mark|Number|Connector_Punctuation)
Packit Service bd74e6
Packit Service bd74e6
  \W       非単語構成文字
Packit Service bd74e6
Packit Service bd74e6
  \s       空白文字
Packit Service bd74e6
Packit Service bd74e6
           Unicode以外の場合:
Packit Service bd74e6
             \t, \n, \v, \f, \r, \x20
Packit Service bd74e6
Packit Service bd74e6
           Unicodeの場合:
Packit Service bd74e6
             U+0009, U+000A, U+000B, U+000C, U+000D, U+0085(NEL), 
Packit Service bd74e6
             General_Category -- Line_Separator
Packit Service bd74e6
                              -- Paragraph_Separator
Packit Service bd74e6
                              -- Space_Separator
Packit Service bd74e6
Packit Service bd74e6
  \S       非空白文字
Packit Service bd74e6
Packit Service bd74e6
  \d       10進数字
Packit Service bd74e6
Packit Service bd74e6
           Unicodeの場合: General_Category -- Decimal_Number
Packit Service bd74e6
Packit Service bd74e6
  \D       非10進数字
Packit Service bd74e6
Packit Service bd74e6
  \h       16進数字    [0-9a-fA-F]
Packit Service bd74e6
Packit Service bd74e6
  \H       非16進数字
Packit Service bd74e6
Packit Service bd74e6
  \R       汎改行  (* 文字集合の中では使用できない)
Packit Service bd74e6
           "\r\n" or \n,\v,\f,\r  (* 但し \r\nから\rにはバックトラックしない)
Packit Service bd74e6
Packit Service bd74e6
           Unicodeの場合:
Packit Service bd74e6
             "\r\n" or \n,\v,\f,\r or U+0085, U+2028, U+2029
Packit Service bd74e6
Packit Service bd74e6
  \N       非改行文字  (?-m:.)
Packit Service bd74e6
Packit Service bd74e6
  \O       真任意文字  (?m:.)      (* 原作)
Packit Service bd74e6
Packit Service bd74e6
  \X       拡張書記素房     (?>\O(?:\Y\O)*)
Packit Service bd74e6
Packit Service bd74e6
           \Xは照合の開始位置が拡張書記素房の境界かどうかを確認しない。
Packit Service bd74e6
           それを確実にしたければ、\y\Xと書けば良い。
Packit Service bd74e6
Packit Service bd74e6
           Unicodeの場合:
Packit Service bd74e6
             参照 [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
Packit Service bd74e6
Packit Service bd74e6
           Unicode以外の場合:   (?>\r\n|\O)
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
  Character Property
Packit Service bd74e6
Packit Service bd74e6
    * \p{property-name}
Packit Service bd74e6
    * \p{^property-name}    (negative)
Packit Service bd74e6
    * \P{property-name}     (negative)
Packit Service bd74e6
Packit Service bd74e6
    property-name:
Packit Service bd74e6
Packit Service bd74e6
     + 全てのエンコーディングで有効
Packit Service bd74e6
       Alnum, Alpha, Blank, Cntrl, Digit, Graph, Lower,
Packit Service bd74e6
       Print, Punct, Space, Upper, XDigit, Word, ASCII,
Packit Service bd74e6
Packit Service bd74e6
     + EUC-JP, Shift_JISで有効
Packit Service bd74e6
       Hiragana, Katakana
Packit Service bd74e6
Packit Service bd74e6
     + UTF8, UTF16, UTF32で有効
Packit Service bd74e6
       doc/UNICODE_PROPERTIES参照
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
4. 量指定子
Packit Service bd74e6
Packit Service bd74e6
  欲張り
Packit Service bd74e6
Packit Service bd74e6
    ?       一回または零回
Packit Service bd74e6
    *       零回以上
Packit Service bd74e6
    +       一回以上
Packit Service bd74e6
    {n,m}   n回以上m回以下
Packit Service bd74e6
    {n,}    n回以上
Packit Service bd74e6
    {,n}    零回以上n回以下 ({0,n})
Packit Service bd74e6
    {n}     n回
Packit Service bd74e6
Packit Service bd74e6
  無欲
Packit Service bd74e6
Packit Service bd74e6
    ??      一回または零回
Packit Service bd74e6
    *?      零回以上
Packit Service bd74e6
    +?      一回以上
Packit Service bd74e6
    {n,m}?  n回以上m回以下
Packit Service bd74e6
    {n,}?   n回以上
Packit Service bd74e6
    {,n}?   零回以上n回以下 (== {0,n}?)
Packit Service bd74e6
Packit Service bd74e6
  強欲 (欲張りで、繰り返しに成功した後は回数を減らすような後退再試行をしない)
Packit Service bd74e6
Packit Service bd74e6
    ?+      一回または零回
Packit Service bd74e6
    *+      零回以上
Packit Service bd74e6
    ++      一回以上
Packit Service bd74e6
Packit Service bd74e6
    ({n,m}+, {n,}+, {n}+ は、ONIG_SYNTAX_JAVAでのみ強欲な指定子)
Packit Service bd74e6
Packit Service bd74e6
    例. /a*+/ === /(?>a*)/
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
5. 錨
Packit Service bd74e6
Packit Service bd74e6
  ^       行頭
Packit Service bd74e6
  $       行末
Packit Service bd74e6
  \b      単語境界
Packit Service bd74e6
  \B      非単語境界
Packit Service bd74e6
  \y      拡張書記素房 境界
Packit Service bd74e6
  \Y      拡張書記素房 非境界
Packit Service bd74e6
Packit Service bd74e6
  \A      文字列先頭
Packit Service bd74e6
  \Z      文字列末尾、または文字列末尾の改行の直前
Packit Service bd74e6
  \z      文字列末尾
Packit Service bd74e6
  \G      探索開始位置
Packit Service bd74e6
  \K      保持 (結果の開始位置をこの位置に保つ)
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
6. 文字集合
Packit Service bd74e6
Packit Service bd74e6
  ^...    否定   (最低優先度演算子)
Packit Service bd74e6
  x-y     範囲   (xからyまで)
Packit Service bd74e6
  [...]   集合   (文字集合内文字集合)
Packit Service bd74e6
  ..&&..  積演算 (^の次に優先度が低い演算子)
Packit Service bd74e6
Packit Service bd74e6
     例. [a-w&&[^c-g]z] ==> ([a-w] and ([^c-g] or z)) ==> [abh-w]
Packit Service bd74e6
Packit Service bd74e6
  ※ '[', '-', ']'を、文字集合内で通常文字の意味で使用したい場合には、
Packit Service bd74e6
     これらの文字を'\'で退避修飾しなければならない。
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
  POSIXブラケット ([:xxxxx:], 否定 [:^xxxxx:])
Packit Service bd74e6
Packit Service bd74e6
    Unicode以外の場合:
Packit Service bd74e6
Packit Service bd74e6
      alnum    英数字
Packit Service bd74e6
      alpha    英字
Packit Service bd74e6
      ascii    0 - 127
Packit Service bd74e6
      blank    \t, \x20
Packit Service bd74e6
      cntrl
Packit Service bd74e6
      digit    0-9
Packit Service bd74e6
      graph    多バイト文字全部を含む
Packit Service bd74e6
      lower
Packit Service bd74e6
      print    多バイト文字全部を含む
Packit Service bd74e6
      punct
Packit Service bd74e6
      space    \t, \n, \v, \f, \r, \x20
Packit Service bd74e6
      upper
Packit Service bd74e6
      xdigit   0-9, a-f, A-F
Packit Service bd74e6
      word     英数字, "_" および 多バイト文字
Packit Service bd74e6
Packit Service bd74e6
    Unicodeの場合:
Packit Service bd74e6
Packit Service bd74e6
      alnum    Letter | Mark | Decimal_Number
Packit Service bd74e6
      alpha    Letter | Mark
Packit Service bd74e6
      ascii    0000 - 007F
Packit Service bd74e6
      blank    Space_Separator | 0009
Packit Service bd74e6
      cntrl    Control | Format | Unassigned | Private_Use | Surrogate
Packit Service bd74e6
      digit    Decimal_Number
Packit Service bd74e6
      graph    [[:^space:]] && ^Control && ^Unassigned && ^Surrogate
Packit Service bd74e6
      lower    Lowercase_Letter
Packit Service bd74e6
      print    [[:graph:]] | [[:space:]]
Packit Service bd74e6
      punct    Connector_Punctuation | Dash_Punctuation | Close_Punctuation |
Packit Service bd74e6
               Final_Punctuation | Initial_Punctuation | Other_Punctuation |
Packit Service bd74e6
               Open_Punctuation
Packit Service bd74e6
      space    Space_Separator | Line_Separator | Paragraph_Separator |
Packit Service bd74e6
               U+0009 | U+000A | U+000B | U+000C | U+000D | U+0085
Packit Service bd74e6
      upper    Uppercase_Letter
Packit Service bd74e6
      xdigit   U+0030 - U+0039 | U+0041 - U+0046 | U+0061 - U+0066
Packit Service bd74e6
               (0-9, a-f, A-F)
Packit Service bd74e6
      word     Letter | Mark | Decimal_Number | Connector_Punctuation
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
7. 拡張式集合
Packit Service bd74e6
Packit Service bd74e6
  (?#...)           注釈
Packit Service bd74e6
  (?imxWDSP-imxWDSP)      孤立オプション
Packit Service bd74e6
                            i: 大文字小文字照合
Packit Service bd74e6
                            m: 複数行
Packit Service bd74e6
                            x: 拡張形式
Packit Service bd74e6
                            W: wordがASCIIのみ (\w, \p{Word}, [[:word:]])
Packit Service bd74e6
                               word境界がASCIIのみ (\b)
Packit Service bd74e6
                            D: digitがASCIIのみ (\d, \p{Digit}, [[:digit:]])
Packit Service bd74e6
                            S: spaceがASCIIのみ (\s, \p{Space}, [[:space:]])
Packit Service bd74e6
                            P: POSIXプロパティがASCIIのみ (W,D,Sを全て含んでいる)
Packit Service bd74e6
                               (alnum, alpha, blank, cntrl, digit, graph,
Packit Service bd74e6
                                lower, print, punct, space, upper, xdigit, word)
Packit Service bd74e6
Packit Service bd74e6
  (?imxWDSP-imxWDSP:式)   式オプション
Packit Service bd74e6
Packit Service bd74e6
  (式)              捕獲式集合
Packit Service bd74e6
  (?:式)            非捕獲式集合
Packit Service bd74e6
Packit Service bd74e6
  (?=式)            先読み
Packit Service bd74e6
  (?!式)            否定先読み
Packit Service bd74e6
  (?<=式)           戻り読み
Packit Service bd74e6
  (?
Packit Service bd74e6
Packit Service bd74e6
                    戻り読みの式は固定文字長でなければならない。
Packit Service bd74e6
                    しかし、最上位の選択子だけは異なった文字長が許される。
Packit Service bd74e6
                    例. (?<=a|bc) は許可. (?<=aaa(?:b|cd)) は不許可
Packit Service bd74e6
Packit Service bd74e6
                    否定戻り読みでは、捕獲式集合は許されないが、
Packit Service bd74e6
                    非捕獲式集合は許される。
Packit Service bd74e6
Packit Service bd74e6
  (?>式)            原子的式集合
Packit Service bd74e6
                    式全体を通過したとき、式の中での後退再試行を行なわない
Packit Service bd74e6
Packit Service bd74e6
  (?<name>式), (?'name'式)
Packit Service bd74e6
                    名前付き捕獲式集合
Packit Service bd74e6
                    式集合に名前を割り当てる(定義する)。
Packit Service bd74e6
                    (名前は単語構成文字でなければならない。)
Packit Service bd74e6
Packit Service bd74e6
                    名前だけでなく、捕獲式集合と同様に番号も割り当てられる。
Packit Service bd74e6
                    番号指定が禁止されていない状態 (10. 捕獲式集合 を参照)
Packit Service bd74e6
                    のときは、名前を使わないで番号でも参照できる。
Packit Service bd74e6
Packit Service bd74e6
                    複数の式集合に同じ名前を与えることは許されている。
Packit Service bd74e6
                    この場合には、この名前を使用した後方参照は可能であるが、
Packit Service bd74e6
                    部分式呼出しはできない。
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
  <呼び出し>
Packit Service bd74e6
Packit Service bd74e6
  * 内容の呼び出し
Packit Service bd74e6
  (?{...contents...})           前進中のみの呼び出し
Packit Service bd74e6
  (?{...contents...}D)          Dは方向指定文字
Packit Service bd74e6
                                D = 'X': 前進中および後退中
Packit Service bd74e6
                                    '<': 後退中のみ
Packit Service bd74e6
                                    '>': 前進中のみ
Packit Service bd74e6
  (?{...contents...}[tag])      名札付き
Packit Service bd74e6
  (?{...contents...}[tag]D)
Packit Service bd74e6
Packit Service bd74e6
                              * エスケープ文字はcontentsの中で何の機能も持たない
Packit Service bd74e6
                              * contentsは、'{'文字で始まってはならない
Packit Service bd74e6
Packit Service bd74e6
  (?{{{...contents...}}})     contentsの中のn個連続の'}'は、(n+1)個連続の{{{...}}}
Packit Service bd74e6
                              の中で許される
Packit Service bd74e6
Packit Service bd74e6
    tagに許される文字: _ A-Z a-z 0-9 (* 最初の文字: _ A-Z a-z)
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
  * 名前の呼び出し
Packit Service bd74e6
  (*name)
Packit Service bd74e6
  (*name{args...})         引数付き
Packit Service bd74e6
  (*name[tag])             名札付き
Packit Service bd74e6
  (*name[tag]{args...})
Packit Service bd74e6
Packit Service bd74e6
    nameに許される文字: _ A-Z a-z 0-9 (* 最初の文字: _ A-Z a-z)
Packit Service bd74e6
    tag に許される文字: _ A-Z a-z 0-9 (* 最初の文字: _ A-Z a-z)
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
  <不在機能群>
Packit Service bd74e6
Packit Service bd74e6
  (?~不在式)        不在繰り返し  (*原案 田中哲)
Packit Service bd74e6
                    これは .*(より正確には\O*)のように動作するが、<不在式>に
Packit Service bd74e6
                    適合する文字列を含まない範囲に制限される。
Packit Service bd74e6
                    これは(?~|不在式|\O*)の省略表記である。
Packit Service bd74e6
Packit Service bd74e6
  (?~|不在式|式)    不在式  (* 原作)
Packit Service bd74e6
                    これは<式>のように動作するが、<不在式>に適合する文字列を
Packit Service bd74e6
                    含まない範囲に制限される。
Packit Service bd74e6
Packit Service bd74e6
                    例 (?~|345|\d*)  "12345678"  ==> "12", "1", ""
Packit Service bd74e6
Packit Service bd74e6
  (?~|不在式)       不在停止 (* 原作)
Packit Service bd74e6
                    この演算子を通過した後は、対象文字列の適合範囲が
Packit Service bd74e6
                    <不在式>に適合する文字列を含まない範囲に制限される。
Packit Service bd74e6
Packit Service bd74e6
  (?~|)             範囲消去
Packit Service bd74e6
                    不在停止の効果を消して、それ以前の状態にする。
Packit Service bd74e6
Packit Service bd74e6
     * 不在機能の入れ子には対応しておらず、その場合の挙動は不定とする。
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
  <条件文>
Packit Service bd74e6
Packit Service bd74e6
  (?(条件式)成功式|失敗式)    条件式が成功すれば成功式、失敗すれば失敗式を実行する
Packit Service bd74e6
                             この機能の存在理由は、成功式が失敗しても失敗式には
Packit Service bd74e6
                             行かないこと。これは他の正規表現で書くことができない。
Packit Service bd74e6
                             もうひとつは、条件式が後方参照の番号/名前のとき、
Packit Service bd74e6
                             後方参照値の有効性を調べる(文字列と照合はしない)
Packit Service bd74e6
                             意味になる。
Packit Service bd74e6
Packit Service bd74e6
  (?(条件式)成功式)           条件式が成功すれば成功式を実行する
Packit Service bd74e6
                             (条件式が通常の式のときには、この構文は不必要だが
Packit Service bd74e6
                              今のところエラーにはしない。)
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
                    条件式は後方参照の番号/名前または普通の式を使用できる。
Packit Service bd74e6
                    条件式が後方参照の場合、成功式と失敗式の両方を省略可能であり、
Packit Service bd74e6
                    この場合、後方参照値有効性を調べる(成功/失敗)機能のみになる。
Packit Service bd74e6
Packit Service bd74e6
  [後方参照値有効性確認器]  (* 原作)
Packit Service bd74e6
    (?(n)), (?(-n)), (?(+n)), (?(n+level)) ...
Packit Service bd74e6
    (?(<n>)), (?('-n')), (?(<+n>)) ...
Packit Service bd74e6
    (?(<name>)), (?('name')), (?(<name+level>)) ...
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
8. 後方参照
Packit Service bd74e6
Packit Service bd74e6
  \n          番号指定参照     (n >= 1)
Packit Service bd74e6
  \k<n>       番号指定参照     (n >= 1)
Packit Service bd74e6
  \k'n'       番号指定参照     (n >= 1)
Packit Service bd74e6
  \k<-n>      相対番号指定参照 (n >= 1)
Packit Service bd74e6
  \k'-n'      相対番号指定参照 (n >= 1)
Packit Service bd74e6
  \k<+n>      相対番号指定参照 (n >= 1)
Packit Service bd74e6
  \k'+n'      相対番号指定参照 (n >= 1)
Packit Service bd74e6
  \k<name>    名前指定参照
Packit Service bd74e6
  \k'name'    名前指定参照
Packit Service bd74e6
Packit Service bd74e6
  名前指定参照で、その名前が複数の式集合で多重定義されている場合には、
Packit Service bd74e6
  番号の大きい式集合から優先的に参照される。
Packit Service bd74e6
  (マッチしないときには番号の小さい式集合が参照される)
Packit Service bd74e6
Packit Service bd74e6
  ※ 番号指定参照は、名前付き捕獲式集合が定義され、
Packit Service bd74e6
     かつ ONIG_OPTION_CAPTURE_GROUPが指定されていない場合には、
Packit Service bd74e6
     禁止される。(10. 捕獲式集合 を参照)
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
  ネストレベル付き後方参照
Packit Service bd74e6
Packit Service bd74e6
    level: 0, 1, 2, ...
Packit Service bd74e6
Packit Service bd74e6
    \k<n+level>     (n >= 1)
Packit Service bd74e6
    \k<n-level>     (n >= 1)
Packit Service bd74e6
    \k'n+level'     (n >= 1)
Packit Service bd74e6
    \k'n-level'     (n >= 1)
Packit Service bd74e6
Packit Service bd74e6
    \k<name+level>
Packit Service bd74e6
    \k<name-level>
Packit Service bd74e6
    \k'name+level'
Packit Service bd74e6
    \k'name-level'
Packit Service bd74e6
Packit Service bd74e6
    後方参照の位置から相対的な部分式呼出しネストレベルを指定して、そのレベルでの
Packit Service bd74e6
    捕獲値を参照する。
Packit Service bd74e6
Packit Service bd74e6
    例-1.
Packit Service bd74e6
Packit Service bd74e6
      /\A(?|.|(?:(?.)\g\k<b+0>))\z/.match("reer")
Packit Service bd74e6
Packit Service bd74e6
    例-2.
Packit Service bd74e6
Packit Service bd74e6
      r = Regexp.compile(<<'__REGEXP__'.strip, Regexp::EXTENDED)
Packit Service bd74e6
      (?<element> \g<stag> \g<content>* \g<etag> ){0}
Packit Service bd74e6
      (?<stag> < \g<name> \s* > ){0}
Packit Service bd74e6
      (?<name> [a-zA-Z_:]+ ){0}
Packit Service bd74e6
      (?<content> [^<&]+ (\g<element> | [^<&]+)* ){0}
Packit Service bd74e6
      (?<etag> </ \k<name+1> >){0}
Packit Service bd74e6
      \g<element>
Packit Service bd74e6
      __REGEXP__
Packit Service bd74e6
Packit Service bd74e6
      p r.match('<foo>f<bar>bbb</bar>f</foo>').captures
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
9. 部分式呼出し ("田中哲スペシャル")   (* 原作)
Packit Service bd74e6
Packit Service bd74e6
  \g<name>    名前指定呼出し
Packit Service bd74e6
  \g'name'    名前指定呼出し
Packit Service bd74e6
  \g<n>       番号指定呼出し    (n >= 1)
Packit Service bd74e6
  \g'n'       番号指定呼出し    (n >= 1)
Packit Service bd74e6
  \g<0>       番号指定呼出し(全体呼び出し)
Packit Service bd74e6
  \g'0'       番号指定呼出し(全体呼び出し)
Packit Service bd74e6
  \g<-n>      相対番号指定呼出し (n >= 1)
Packit Service bd74e6
  \g'-n'      相対番号指定呼出し (n >= 1)
Packit Service bd74e6
  \g<+n>      相対番号指定呼出し (n >= 1)
Packit Service bd74e6
  \g'+n'      相対番号指定呼出し (n >= 1)
Packit Service bd74e6
Packit Service bd74e6
  ※ 最左位置での再帰呼出しは禁止される。
Packit Service bd74e6
     例. (?<name>a|\g<name>b)   => error
Packit Service bd74e6
         (?<name>a|b\g<name>c)  => OK
Packit Service bd74e6
Packit Service bd74e6
  ※ 番号指定呼出しは、名前付き捕獲式集合が定義され、
Packit Service bd74e6
     かつ ONIG_OPTION_CAPTURE_GROUPが指定されていない場合には、
Packit Service bd74e6
     禁止される。 (10. 捕獲式集合 を参照)
Packit Service bd74e6
Packit Service bd74e6
  ※ 呼び出された式集合のオプション状態が呼出し側のオプション状態と異なっている
Packit Service bd74e6
     とき、呼び出された側のオプション状態が有効である。
Packit Service bd74e6
Packit Service bd74e6
     例. (?-i:\g<name>)(?i:(?<name>a)){0} は "A" に照合成功する。
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
10. 捕獲式集合
Packit Service bd74e6
Packit Service bd74e6
  捕獲式集合(...)は、以下の条件に応じて振舞が変化する。
Packit Service bd74e6
  (名前付き捕獲式集合は変化しない)
Packit Service bd74e6
Packit Service bd74e6
  case 1. /.../     (名前付き捕獲式集合は不使用、オプションなし)
Packit Service bd74e6
Packit Service bd74e6
     (...) は、捕獲式集合として扱われる。
Packit Service bd74e6
Packit Service bd74e6
  case 2. /.../g    (名前付き捕獲式集合は不使用、オプション 'g'を指定)
Packit Service bd74e6
Packit Service bd74e6
     (...) は、非捕獲式集合として扱われる。
Packit Service bd74e6
Packit Service bd74e6
  case 3. /..(?<name>..)../   (名前付き捕獲式集合は使用、オプションなし)
Packit Service bd74e6
Packit Service bd74e6
     (...) は、非捕獲式集合として扱われる。
Packit Service bd74e6
     番号指定参照/呼び出しは不許可。
Packit Service bd74e6
Packit Service bd74e6
  case 4. /..(?<name>..)../G  (名前付き捕獲式集合は使用、オプション 'G'を指定)
Packit Service bd74e6
Packit Service bd74e6
     (...) は、捕獲式集合として扱われる。
Packit Service bd74e6
     番号指定参照/呼び出しは許可。
Packit Service bd74e6
Packit Service bd74e6
  但し
Packit Service bd74e6
    g: ONIG_OPTION_DONT_CAPTURE_GROUP
Packit Service bd74e6
    G: ONIG_OPTION_CAPTURE_GROUP
Packit Service bd74e6
    ('g'と'G'オプションは、ruby-dev MLで議論された。)
Packit Service bd74e6
Packit Service bd74e6
  これらの振舞の意味は、
Packit Service bd74e6
  名前付き捕獲と名前無し捕獲を同時に使用する必然性のある場面は少ないであろう
Packit Service bd74e6
  という理由から考えられたものである。
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
-----------------------------
Packit Service bd74e6
補記 1. 文法依存オプション
Packit Service bd74e6
Packit Service bd74e6
   + ONIG_SYNTAX_ONIGURUMA
Packit Service bd74e6
     (?m): 終止符記号(.)は改行と照合成功
Packit Service bd74e6
Packit Service bd74e6
   + ONIG_SYNTAX_PERL と ONIG_SYNTAX_JAVA
Packit Service bd74e6
     (?s): 終止符記号(.)は改行と照合成功
Packit Service bd74e6
     (?m): ^ は改行の直後に照合する、$ は改行の直前に照合する
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
補記 2. 独自拡張機能
Packit Service bd74e6
Packit Service bd74e6
   + 16進数数字、非16進数字  \h, \H
Packit Service bd74e6
   + 名前付き捕獲式集合      (?<name>...), (?'name'...)
Packit Service bd74e6
   + 名前指定後方参照        \k<name>
Packit Service bd74e6
   + 部分式呼出し            \g<name>, \g<group-num>
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
補記 3. Perl 5.8.0と比較して存在しない機能
Packit Service bd74e6
Packit Service bd74e6
   + \N{name}
Packit Service bd74e6
   + \l,\u,\L,\U,\C
Packit Service bd74e6
   + (?{code})
Packit Service bd74e6
   + (??{code})
Packit Service bd74e6
Packit Service bd74e6
   * \Q...\E
Packit Service bd74e6
     但しONIG_SYNTAX_PERLとONIG_SYNTAX_JAVAでは有効
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
補記 4. Ruby 1.8 の日本語化 GNU regex(version 0.12)との違い
Packit Service bd74e6
Packit Service bd74e6
   + 文字Property機能追加 (\p{property}, \P{Property})
Packit Service bd74e6
   + 16進数字タイプ追加 (\h, \H)
Packit Service bd74e6
   + 戻り読み機能を追加
Packit Service bd74e6
   + 強欲な繰り返し指定子を追加 (?+, *+, ++)
Packit Service bd74e6
   + 文字集合の中の演算子を追加 ([...], &&)
Packit Service bd74e6
     ('[' は、文字集合の中で通常の文字として使用するときには
Packit Service bd74e6
      退避修飾しなければならない)
Packit Service bd74e6
   + 名前付き捕獲式集合と、部分式呼出し機能追加
Packit Service bd74e6
   + 多バイト文字コードが指定されているとき、
Packit Service bd74e6
     文字集合の中で八進数または十六進数表現の連続は、多バイト符号で表現された
Packit Service bd74e6
     一個の文字と解釈される
Packit Service bd74e6
     (例. [\xa1\xa2], [\xa1\xa7-\xa4\xa1])
Packit Service bd74e6
   + 文字集合の中で、一バイト文字と多バイト文字の範囲指定は許される。
Packit Service bd74e6
     ex. /[a-あ]/
Packit Service bd74e6
   + 孤立オプションの有効範囲は、その孤立オプションを含んでいる式集合の
Packit Service bd74e6
     終わりまでである
Packit Service bd74e6
     例. (?:(?i)a|b) は (?:(?i:a|b)) と解釈される、(?:(?i:a)|b)ではない
Packit Service bd74e6
   + 孤立オプションはその前の式に対して透過的ではない
Packit Service bd74e6
     例. /a(?i)*/ は文法エラーとなる
Packit Service bd74e6
   + 不完全な繰り返し範囲指定子は通常の文字列として許可される
Packit Service bd74e6
     例. /{/, /({)/, /a{2,3/
Packit Service bd74e6
   + 否定的POSIXブラケット [:^xxxx:] を追加
Packit Service bd74e6
   + POSIXブラケット [:ascii:] を追加
Packit Service bd74e6
   + 先読みの繰り返しは不許可
Packit Service bd74e6
     例. /(?=a)*/, /(?!b){5}/
Packit Service bd74e6
   + 数値で指定された文字に対しても、大文字小文字照合オプションは有効
Packit Service bd74e6
     例. /\x61/i =~ "A"
Packit Service bd74e6
   + 繰り返し回数指定で、最低回数の省略(0回)ができる
Packit Service bd74e6
     /a{,n}/ == /a{0,n}/
Packit Service bd74e6
     最低回数と最大回数の同時省略は許されない。(/a{,}/)
Packit Service bd74e6
   + /a{n}?/は無欲な演算子ではない。
Packit Service bd74e6
     /a{n}?/ == /(?:a{n})?/
Packit Service bd74e6
   + 無効な後方参照をチェックしてエラーにする。
Packit Service bd74e6
     /\1/, /(a)\2/
Packit Service bd74e6
   + 無限繰り返しの中で、長さ零での照合成功は繰り返しを中断させるが、
Packit Service bd74e6
     このとき、中断すべきかどうかの判定として、捕獲式集合の捕獲状態の
Packit Service bd74e6
     変化まで考慮している
Packit Service bd74e6
     /(?:()|())*\1\2/ =~ ""
Packit Service bd74e6
     /(?:\1a|())*/ =~ "a"
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
補記 5. 実装されているが、既定値では有効にしていない機能
Packit Service bd74e6
Packit Service bd74e6
   + 捕獲履歴参照
Packit Service bd74e6
Packit Service bd74e6
     (?@...) と (?@<name>...)
Packit Service bd74e6
Packit Service bd74e6
     例. /(?@a)*/.match("aaa") ==> [<0-1>, <1-2>, <2-3>]
Packit Service bd74e6
Packit Service bd74e6
     使用方法は、sample/listcap.cを参照
Packit Service bd74e6
Packit Service bd74e6
     有効にしていない理由は、どの程度役に立つかはっきりしないため。
Packit Service bd74e6
Packit Service bd74e6
Packit Service bd74e6
補記 6. 問題点
Packit Service bd74e6
Packit Service bd74e6
   + エンコーディングバイト値が適正な価かどうかのチェックは行なっていない。
Packit Service bd74e6
Packit Service bd74e6
     例: UTF-8
Packit Service bd74e6
Packit Service bd74e6
     * 先頭バイトとして不正なバイトを一文字とみなす
Packit Service bd74e6
       /./u =~ "\xa3"
Packit Service bd74e6
Packit Service bd74e6
     * 不完全なバイトシーケンスのチェックをしない
Packit Service bd74e6
      /\w+/u =~ "a\xf3\x8ec"
Packit Service bd74e6
Packit Service bd74e6
     これを調べることは可能ではあるが、遅くなるので行なわない。
Packit Service bd74e6
Packit Service bd74e6
     文字列として、そのようなバイト列を指定した場合の動作は保証しない。
Packit Service bd74e6
Packit Service bd74e6
終り