���� ����ɽ�� Version 5.9.1    2007/09/05

����ʸˡ: ONIG_SYNTAX_RUBY (������)


1. ��������

  \       ���򽤾� (����������)  ����ɽ�������ͭ��/̵��������
  |       �����
  (...)   ������   (���롼��)
  [...]   ʸ������ (ʸ�����饹)


2. ʸ��

  \t           ��ʿ����         (0x09)
  \v           ��ľ����         (0x0B)
  \n           ����             (0x0A)
  \r           ����             (0x0D)
  \b           �������         (0x08)
  \f           ����             (0x0C)
  \a           ��               (0x07)
  \e           ���򽤾�         (0x1B)
  \nnn         Ȭ�ʿ�ɽ��        ��沽�Х�����(�ΰ���)
  \xHH         ��ϻ�ʿ�ɽ��      ��沽�Х�����(�ΰ���)
  \x{7HHHHHHH} ��ĥ��ϻ�ʿ�ɽ��  �����ɥݥ������
  \cx          ����ʸ��ɽ��      �����ɥݥ������
  \C-x         ����ʸ��ɽ��      �����ɥݥ������
  \M-x         Ķ  (x|0x80)      �����ɥݥ������
  \M-\C-x      Ķ + ����ʸ��ɽ�� �����ɥݥ������

  �� \b�ϡ�ʸ��������ǤΤ�ͭ��


3. ʸ����

  .        Ǥ��ʸ�� (���Ԥ����)

  \w       ñ�칽��ʸ��

           Unicode�ʳ��ξ��:
             �ѿ���, "_" ����� ¿�Х���ʸ����

           Unicode��:
             General_Category -- (Letter|Mark|Number|Connector_Punctuation)

  \W       ��ñ�칽��ʸ��

  \s       ����ʸ��

           Unicode�ʳ��ξ��:
             \t, \n, \v, \f, \r, \x20

           Unicode��:
             0009, 000A, 000B, 000C, 000D, 0085(NEL), 
             General_Category -- Line_Separator
                              -- Paragraph_Separator
                              -- Space_Separator

  \S       �����ʸ��

  \d       10�ʿ���

           Unicode��: General_Category -- Decimal_Number

  \D       ��10�ʿ���

  \h       16�ʿ���    [0-9a-fA-F]

  \H       ��16�ʿ���


  Character Property

    * \p{property-name}
    * \p{^property-name}    (negative)
    * \P{property-name}     (negative)

    property-name:

     + ���ƤΥ��󥳡��ǥ��󥰤�ͭ��
       Alnum, Alpha, Blank, Cntrl, Digit, Graph, Lower,
       Print, Punct, Space, Upper, XDigit, Word, ASCII,

     + EUC-JP, Shift_JIS��ͭ��
       Hiragana, Katakana

     + UTF8, UTF16, UTF32��ͭ��
       Any, Assigned, C, Cc, Cf, Cn, Co, Cs, L, Ll, Lm, Lo, Lt, Lu,
       M, Mc, Me, Mn, N, Nd, Nl, No, P, Pc, Pd, Pe, Pf, Pi, Po, Ps,
       S, Sc, Sk, Sm, So, Z, Zl, Zp, Zs, 
       Arabic, Armenian, Bengali, Bopomofo, Braille, Buginese,
       Buhid, Canadian_Aboriginal, Cherokee, Common, Coptic,
       Cypriot, Cyrillic, Deseret, Devanagari, Ethiopic, Georgian,
       Glagolitic, Gothic, Greek, Gujarati, Gurmukhi, Han, Hangul,
       Hanunoo, Hebrew, Hiragana, Inherited, Kannada, Katakana,
       Kharoshthi, Khmer, Lao, Latin, Limbu, Linear_B, Malayalam,
       Mongolian, Myanmar, New_Tai_Lue, Ogham, Old_Italic, Old_Persian,
       Oriya, Osmanya, Runic, Shavian, Sinhala, Syloti_Nagri, Syriac,
       Tagalog, Tagbanwa, Tai_Le, Tamil, Telugu, Thaana, Thai, Tibetan,
       Tifinagh, Ugaritic, Yi



4. �̻����

  ��ĥ��

    ?       ���ޤ�������
    *       ����ʾ�
    +       ���ʾ�
    {n,m}   n��ʾ�m��ʲ�
    {n,}    n��ʾ�
    {,n}    ����ʾ�n��ʲ� ({0,n})
    {n}     n��

  ̵��

    ??      ���ޤ�������
    *?      ����ʾ�
    +?      ���ʾ�
    {n,m}?  n��ʾ�m��ʲ�
    {n,}?   n��ʾ�
    {,n}?   ����ʾ�n��ʲ� (== {0,n}?)

  ���� (��ĥ��ǡ������֤�������������ϲ���򸺤餹�褦�ʸ���ƻ�Ԥ򤷤ʤ�)

    ?+      ���ޤ�������
    *+      ����ʾ�
    ++      ���ʾ�

    ({n,m}+, {n,}+, {n}+ �ϡ�ONIG_SYNTAX_JAVA�ǤΤ߶��ߤʻ����)

    ��. /a*+/ === /(?>a*)/


5. ��

  ^       ��Ƭ
  $       ����
  \b      ñ�춭��
  \B      ��ñ�춭��
  \A      ʸ������Ƭ
  \Z      ʸ�����������ޤ���ʸ���������β��Ԥ�ľ��
  \z      ʸ��������
  \G      �ȹ糫�ϰ���


6. ʸ������

  ^...    ����   (����ͥ���ٱ黻��)
  x-y     �ϰ�   (x����y�ޤ�)
  [...]   ����   (ʸ��������ʸ������)
  ..&&..  �ѱ黻 (^�μ���ͥ���٤��㤤�黻��)

     ��. [a-w&&[^c-g]z] ==> ([a-w] and ([^c-g] or z)) ==> [abh-w]

  �� '[', '-', ']'��ʸ����������̾�ʸ���ΰ�̣�ǻ��Ѥ��������ˤϡ�
     ������ʸ����'\'�����򽤾����ʤ���Фʤ�ʤ���


  POSIX�֥饱�å� ([:xxxxx:], ���� [:^xxxxx:])

    Unicode�ʳ��ξ��:

      alnum    �ѿ���
      alpha    �ѻ�
      ascii    0 - 127
      blank    \t, \x20
      cntrl
      digit    0-9
      graph    ¿�Х���ʸ��������ޤ�
      lower
      print    ¿�Х���ʸ��������ޤ�
      punct
      space    \t, \n, \v, \f, \r, \x20
      upper
      xdigit   0-9, a-f, A-F
      word     �ѿ���, "_" ����� ¿�Х���ʸ��

    Unicode��:

      alnum    Letter | Mark | Decimal_Number
      alpha    Letter | Mark
      ascii    0000 - 007F
      blank    Space_Separator | 0009
      cntrl    Control | Format | Unassigned | Private_Use | Surrogate
      digit    Decimal_Number
      graph    [[:^space:]] && ^Control && ^Unassigned && ^Surrogate
      lower    Lowercase_Letter
      print    [[:graph:]] | [[:space:]]
      punct    Connector_Punctuation | Dash_Punctuation | Close_Punctuation |
               Final_Punctuation | Initial_Punctuation | Other_Punctuation |
               Open_Punctuation
      space    Space_Separator | Line_Separator | Paragraph_Separator |
               0009 | 000A | 000B | 000C | 000D | 0085
      upper    Uppercase_Letter
      xdigit   0030 - 0039 | 0041 - 0046 | 0061 - 0066
               (0-9, a-f, A-F)
      word     Letter | Mark | Decimal_Number | Connector_Punctuation



7. ��ĥ������

  (?#...)           ����
  (?imx-imx)        ��Ω���ץ����
                      i: ��ʸ����ʸ���ȹ�
                      m: ʣ����
                      x: ��ĥ����
  (?imx-imx:��)     �����ץ����

  (��)              ��ͼ�����
  (?:��)            ����ͼ�����

  (?=��)            ���ɤ�
  (?!��)            �������ɤ�
  (?<=��)           ����ɤ�
  (?<!��)           ��������ɤ�

                    ����ɤߤμ��ϸ���ʸ��Ĺ�Ǥʤ���Фʤ�ʤ���
                    ���������Ǿ�̤�����Ҥ����ϰۤʤä�ʸ��Ĺ��������롣
                    ��. (?<=a|bc) �ϵ���. (?<=aaa(?:b|cd)) ���Ե���

                    ��������ɤߤǤϡ���ͼ�����ϵ�����ʤ�����
                    ����ͼ�����ϵ�����롣

  (?>��)            ����Ū������
                    �����Τ��̲ᤷ���Ȥ���������Ǥθ���ƻ�Ԥ�Ԥʤ�ʤ�

  (?<name>��), (?'name'��)
                    ̾���դ���ͼ�����
                    �������̾���������Ƥ�(�������)��
                    (̾����ñ�칽��ʸ���Ǥʤ���Фʤ�ʤ���)

                    ̾�������Ǥʤ�����ͼ������Ʊ�ͤ��ֹ�������Ƥ��롣
                    �ֹ���꤬�ػߤ���Ƥ��ʤ����� (10. ��ͼ����� �򻲾�)
                    �ΤȤ��ϡ�̾����Ȥ�ʤ����ֹ�Ǥ⻲�ȤǤ��롣

                    ʣ���μ������Ʊ��̾����Ϳ���뤳�Ȥϵ�����Ƥ��롣
                    ���ξ��ˤϡ�����̾������Ѥ����������Ȥϲ�ǽ�Ǥ��뤬��
                    ��ʬ���ƽФ��ϤǤ��ʤ���


8. ��������

  \n          �ֹ���껲��     (n >= 1)
  \k<n>       �ֹ���껲��     (n >= 1)
  \k'n'       �ֹ���껲��     (n >= 1)
  \k<-n>      �����ֹ���껲�� (n >= 1)
  \k'-n'      �����ֹ���껲�� (n >= 1)
  \k<name>    ̾�����껲��
  \k'name'    ̾�����껲��

  ̾�����껲�Ȥǡ�����̾����ʣ���μ������¿���������Ƥ�����ˤϡ�
  �ֹ���礭�������礫��ͥ��Ū�˻��Ȥ���롣
  (�ޥå����ʤ��Ȥ��ˤ��ֹ�ξ����������礬���Ȥ����)

  �� �ֹ���껲�Ȥϡ�̾���դ���ͼ����礬������졢
     ���� ONIG_OPTION_CAPTURE_GROUP�����ꤵ��Ƥ��ʤ����ˤϡ�
     �ػߤ���롣(10. ��ͼ����� �򻲾�)


  �ͥ��ȥ�٥��դ���������

    level: 0, 1, 2, ...

    \k<n+level>     (n >= 1)
    \k<n-level>     (n >= 1)
    \k'n+level'     (n >= 1)
    \k'n-level'     (n >= 1)

    \k<name+level>
    \k<name-level>
    \k'name+level'
    \k'name-level'

    �������Ȥΰ��֤�������Ū����ʬ���ƽФ��ͥ��ȥ�٥����ꤷ�ơ����Υ�٥�Ǥ�
    ����ͤ򻲾Ȥ��롣

    ��-1.

      /\A(?<a>|.|(?:(?<b>.)\g<a>\k<b+0>))\z/.match("reer")

    ��-2.

      r = Regexp.compile(<<'__REGEXP__'.strip, Regexp::EXTENDED)
      (?<element> \g<stag> \g<content>* \g<etag> ){0}
      (?<stag> < \g<name> \s* > ){0}
      (?<name> [a-zA-Z_:]+ ){0}
      (?<content> [^<&]+ (\g<element> | [^<&]+)* ){0}
      (?<etag> </ \k<name+1> >){0}
      \g<element>
      __REGEXP__

      p r.match('<foo>f<bar>bbb</bar>f</foo>').captures



9. ��ʬ���ƽФ� ("����ů���ڥ����")

  \g<name>    ̾������ƽФ�
  \g'name'    ̾������ƽФ�
  \g<n>       �ֹ����ƽФ�    (n >= 1)
  \g'n'       �ֹ����ƽФ�    (n >= 1)
  \g<-n>      �����ֹ����ƽФ� (n >= 1)
  \g'-n'      �����ֹ����ƽФ� (n >= 1)

  �� �Ǻ����֤ǤκƵ��ƽФ��϶ػߤ���롣
     ��. (?<name>a|\g<name>b)   => error
         (?<name>a|b\g<name>c)  => OK

  �� �ֹ����ƽФ��ϡ�̾���դ���ͼ����礬������졢
     ���� ONIG_OPTION_CAPTURE_GROUP�����ꤵ��Ƥ��ʤ����ˤϡ�
     �ػߤ���롣 (10. ��ͼ����� �򻲾�)

  �� �ƤӽФ��줿������Υ��ץ������֤��ƽФ�¦�Υ��ץ������֤ȰۤʤäƤ���
     �Ȥ����ƤӽФ��줿¦�Υ��ץ������֤�ͭ���Ǥ��롣

     ��. (?-i:\g<name>)(?i:(?<name>a)){0} �� "A" �˾ȹ��������롣


10. ��ͼ�����

  ��ͼ�����(...)�ϡ��ʲ��ξ��˱����ƿ����Ѳ����롣
  (̾���դ���ͼ�������Ѳ����ʤ�)

  case 1. /.../     (̾���դ���ͼ�������Ի��ѡ����ץ����ʤ�)

     (...) �ϡ���ͼ�����Ȥ��ư����롣

  case 2. /.../g    (̾���դ���ͼ�������Ի��ѡ����ץ���� 'g'�����)

     (...) �ϡ�����ͼ�����Ȥ��ư����롣

  case 3. /..(?<name>..)../   (̾���դ���ͼ�����ϻ��ѡ����ץ����ʤ�)

     (...) �ϡ�����ͼ�����Ȥ��ư����롣
     �ֹ���껲��/�ƤӽФ����Ե��ġ�

  case 4. /..(?<name>..)../G  (̾���դ���ͼ�����ϻ��ѡ����ץ���� 'G'�����)

     (...) �ϡ���ͼ�����Ȥ��ư����롣
     �ֹ���껲��/�ƤӽФ��ϵ��ġ�

  �
    g: ONIG_OPTION_DONT_CAPTURE_GROUP
    G: ONIG_OPTION_CAPTURE_GROUP
    ('g'��'G'���ץ����ϡ�ruby-dev ML�ǵ������줿��)

  �����ο���ΰ�̣�ϡ�
  ̾���դ���ͤ�̾��̵����ͤ�Ʊ���˻��Ѥ���ɬ�����Τ�����̤Ͼ��ʤ��Ǥ�����
  �Ȥ�����ͳ����ͤ���줿��ΤǤ��롣


-----------------------------
�䵭 1. ʸˡ��¸���ץ����

   + ONIG_SYNTAX_RUBY
     (?m): �����䵭��(.)�ϲ��ԤȾȹ�����

   + ONIG_SYNTAX_PERL �� ONIG_SYNTAX_JAVA
     (?s): �����䵭��(.)�ϲ��ԤȾȹ�����
     (?m): ^ �ϲ��Ԥ�ľ��˾ȹ礹�롢$ �ϲ��Ԥ�ľ���˾ȹ礹��


�䵭 2. �ȼ���ĥ��ǽ

   + 16�ʿ���������16�ʿ���  \h, \H
   + ̾���դ���ͼ�����      (?<name>...), (?'name'...)
   + ̾�������������        \k<name>
   + ��ʬ���ƽФ�            \g<name>, \g<group-num>


�䵭 3. Perl 5.8.0����Ӥ���¸�ߤ��ʤ���ǽ

   + \N{name}
   + \l,\u,\L,\U, \X, \C
   + (?{code})
   + (??{code})
   + (?(condition)yes-pat|no-pat)

   * \Q...\E
     â��ONIG_SYNTAX_PERL��ONIG_SYNTAX_JAVA�Ǥ�ͭ��


�䵭 4. Ruby 1.8 �����ܸ첽 GNU regex(version 0.12)�Ȥΰ㤤

   + ʸ��Property��ǽ�ɲ� (\p{property}, \P{Property})
   + 16�ʿ����������ɲ� (\h, \H)
   + ����ɤߵ�ǽ���ɲ�
   + ���ߤʷ����֤�����Ҥ��ɲ� (?+, *+, ++)
   + ʸ���������α黻�Ҥ��ɲ� ([...], &&)
     ('[' �ϡ�ʸ�����������̾��ʸ���Ȥ��ƻ��Ѥ���Ȥ��ˤ�
      ���򽤾����ʤ���Фʤ�ʤ�)
   + ̾���դ���ͼ�����ȡ���ʬ���ƽФ���ǽ�ɲ�
   + ¿�Х���ʸ�������ɤ����ꤵ��Ƥ���Ȥ���
     ʸ����������Ȭ�ʿ��ޤ��Ͻ�ϻ�ʿ�ɽ����Ϣ³�ϡ�¿�Х�������ɽ�����줿
     ��Ĥ�ʸ���Ȳ�ᤵ���
     (��. [\xa1\xa2], [\xa1\xa7-\xa4\xa1])
   + ʸ���������ǡ���Х���ʸ����¿�Х���ʸ�����ϰϻ���ϵ�����롣
     ex. /[a-��]/
   + ��Ω���ץ�����ͭ���ϰϤϡ����θ�Ω���ץ�����ޤ�Ǥ��뼰�����
     �����ޤǤǤ���
     ��. (?:(?i)a|b) �� (?:(?i:a|b)) �Ȳ�ᤵ��롢(?:(?i:a)|b)�ǤϤʤ�
   + ��Ω���ץ����Ϥ������μ����Ф���Ʃ��Ū�ǤϤʤ�
     ��. /a(?i)*/ ��ʸˡ���顼�Ȥʤ�
   + �Դ����ʷ����֤��ϰϻ���Ҥ��̾��ʸ����Ȥ��Ƶ��Ĥ����
     ��. /{/, /({)/, /a{2,3/
   + ����ŪPOSIX�֥饱�å� [:^xxxx:] ���ɲ�
   + POSIX�֥饱�å� [:ascii:] ���ɲ�
   + ���ɤߤη����֤����Ե���
     ��. /(?=a)*/, /(?!b){5}/
   + ���ͤǻ��ꤵ�줿ʸ�����Ф��Ƥ⡢��ʸ����ʸ���ȹ祪�ץ�����ͭ��
     ��. /\x61/i =~ "A"
   + �����֤��������ǡ��������ξ�ά(0��)���Ǥ���
     /a{,n}/ == /a{0,n}/
     �������Ⱥ�������Ʊ����ά�ϵ�����ʤ���(/a{,}/)
   + /a{n}?/��̵�ߤʱ黻�ҤǤϤʤ���
     /a{n}?/ == /(?:a{n})?/
   + ̵���ʸ������Ȥ�����å����ƥ��顼�ˤ��롣
     /\1/, /(a)\2/
   + ̵�·����֤�����ǡ�Ĺ�����Ǥξȹ������Ϸ����֤������Ǥ����뤬��
     ���ΤȤ������Ǥ��٤����ɤ�����Ƚ��Ȥ��ơ���ͼ��������;��֤�
     �Ѳ��ޤǹ�θ���Ƥ���
     /(?:()|())*\1\2/ =~ ""
     /(?:\1a|())*/ =~ "a"



�䵭 5. ��������Ƥ��뤬�������ͤǤ�ͭ���ˤ��Ƥ��ʤ���ǽ

   + ������򻲾�

     (?@...) �� (?@<name>...)

     ��. /(?@a)*/.match("aaa") ==> [<0-1>, <1-2>, <2-3>]

     ������ˡ�ϡ�sample/listcap.c�򻲾�

     ͭ���ˤ��Ƥ��ʤ���ͳ�ϡ��ɤ��������Ω�Ĥ��Ϥä��ꤷ�ʤ����ᡣ


�䵭 6. ������

   + ���󥳡��ǥ��󥰥Х����ͤ�Ŭ���ʲ����ɤ����Υ����å��ϹԤʤäƤ��ʤ���

     ��: UTF-8

     * ��Ƭ�Х��ȤȤ��������ʥХ��Ȥ��ʸ���Ȥߤʤ�
       /./u =~ "\xa3"

     * �Դ����ʥХ��ȥ������󥹤Υ����å��򤷤ʤ�
      /\w+/u =~ "a\xf3\x8ec"

     �����Ĵ�٤뤳�Ȥϲ�ǽ�ǤϤ��뤬���٤��ʤ�ΤǹԤʤ�ʤ���

     ʸ����Ȥ��ơ����Τ褦�ʥХ��������ꤷ������ư����ݾڤ��ʤ���

����