1鬼車 正規表現 Version 6.9.5    2020/01/28
2
3使用文法: ONIG_SYNTAX_ONIGURUMA (既定値)
4
5
61. 基本要素
7
8  \       退避修飾 (エスケープ)  正規表現記号の有効/無効の制御
9  |       選択子
10  (...)   式集合   (グループ)
11  [...]   文字集合 (文字クラス)
12
13
142. 文字
15
16  \t              水平タブ         (0x09)
17  \v              垂直タブ         (0x0B)
18  \n              改行             (0x0A)
19  \r              復帰             (0x0D)
20  \b              後退空白         (0x08)
21  \f              改頁             (0x0C)
22  \a              鐘               (0x07)
23  \e              退避修飾         (0x1B)
24  \nnn            八進数表現        符号化バイト値
25  \o{17777777777} 拡張八進数表現    コードポイント値
26  \uHHHH          拡張十六進数表現  コードポイント値
27  \xHH            十六進数表現      符号化バイト値
28  \x{7HHHHHHH}    拡張十六進数表現  コードポイント値
29  \cx             制御文字表現      コードポイント値
30  \C-x            制御文字表現      コードポイント値
31  \M-x            超  (x|0x80)     コードポイント値
32  \M-\C-x         超 + 制御文字表現 コードポイント値
33
34  ※ \bは、文字集合内でのみ有効
35
36
373. 文字種
38
39  .        任意文字 (改行を除く: オプションに依存)
40
41  \w       単語構成文字
42
43           Unicode以外の場合:
44             英数字, "_" および 多バイト文字。
45
46           Unicodeの場合:
47             General_Category -- (Letter|Mark|Number|Connector_Punctuation)
48
49  \W       非単語構成文字
50
51  \s       空白文字
52
53           Unicode以外の場合:
54             \t, \n, \v, \f, \r, \x20
55
56           Unicodeの場合:
57             U+0009, U+000A, U+000B, U+000C, U+000D, U+0085(NEL),
58             General_Category -- Line_Separator
59                              -- Paragraph_Separator
60                              -- Space_Separator
61
62  \S       非空白文字
63
64  \d       10進数字
65
66           Unicodeの場合: General_Category -- Decimal_Number
67
68  \D       非10進数字
69
70  \h       16進数字    [0-9a-fA-F]
71
72  \H       非16進数字
73
74  \R       汎改行  (* 文字集合の中では使用できない)
75           "\r\n" or \n,\v,\f,\r  (* 但し \r\nから\rにはバックトラックしない)
76
77           Unicodeの場合:
78             "\r\n" or \n,\v,\f,\r or U+0085, U+2028, U+2029
79
80  \N       非改行文字  (?-m:.)
81
82  \O       真任意文字  (?m:.)      (* 原作)
83
84  \X       文章区分    \X === (?>\O(?:\Y\O)*)
85
86           この演算子の意味は、オプション (?y{..})の設定によって変化する。
87
88           \Xは照合の開始位置が区分の境界かどうかを確認しない。
89           それを確実にしたければ、\y\Xと書けば良い。
90
91           [拡張書記素房-状態のとき] (デフォルト)
92             Unicodeの場合:
93               参照 [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
94
95             Unicode以外の場合:  \X === (?>\r\n|\O)
96
97           [単語-状態のとき]
98             現在、Unicodeしかサポートしていない。
99             参照 [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
100
101
102  Character Property
103
104    * \p{property-name}
105    * \p{^property-name}    (negative)
106    * \P{property-name}     (negative)
107
108    property-name:
109
110     + 全てのエンコーディングで有効
111       Alnum, Alpha, Blank, Cntrl, Digit, Graph, Lower,
112       Print, Punct, Space, Upper, XDigit, Word, ASCII,
113
114     + EUC-JP, Shift_JISで有効
115       Hiragana, Katakana
116
117     + UTF8, UTF16, UTF32で有効
118       doc/UNICODE_PROPERTIES参照
119
120
121
1224. 量指定子
123
124  欲張り
125
126    ?       一回または零回
127    *       零回以上
128    +       一回以上
129    {n,m}   (n <= m)  n回以上 かつ m回以下
130    {n,}    n回以上
131    {,n}    零回以上n回以下 ({0,n})
132    {n}     n回
133
134
135  無欲
136
137    ??      零回または一回
138    *?      零回以上
139    +?      一回以上
140    {n,m}?  (n <= m)  n回以上 かつ m回以下
141    {n,}?   n回以上
142    {,n}?   零回以上n回以下 (== {0,n}?)
143
144        {n}? はONIG_SYNTAX_JAVAとONIG_SYNTAX_PERLでのみ無欲な指定子
145        (その場合には、態々そう書く意味はないが)
146        デフォルトの文法では、/a{n}?/ === /(?:a{n})?/
147
148
149  強欲 (欲張りで、繰り返しに成功した後は回数を減らすような後退再試行をしない)
150
151    ?+      一回または零回
152    *+      零回以上
153    ++      一回以上
154    {n,m}   (n > m)  m回以上 かつ n回以下
155
156        {n,m}+, {n,}+, {n}+ は、ONIG_SYNTAX_JAVAとONIG_SYNTAX_PERLでのみ
157        強欲な指定子
158
159    例. /a*+/ === /(?>a*)/
160
161
1625. 錨
163
164  ^       行頭
165  $       行末
166  \b      単語境界
167  \B      非単語境界
168
169  \A      文字列先頭
170  \Z      文字列末尾、または文字列末尾の改行の直前
171  \z      文字列末尾
172  \G      探索開始位置
173  \K      保持 (結果の開始位置をこの位置に保つ)
174
175
176  \y      文章区分 境界
177  \Y      文章区分 非境界
178
179          この演算子の意味は、オプション (?y{..})の設定によって変化する。
180
181           [拡張書記素房-状態のとき] (デフォルト)
182             Unicodeの場合:
183               参照 [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
184
185             Unicode以外の場合:
186               \rと\nの間を除く全ての位置
187
188           [単語-状態のとき]
189             現在、Unicodeしかサポートしていない。
190             参照 [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
191
192
193
1946. 文字集合
195
196  ^...    否定   (最低優先度演算子)
197  x-y     範囲   (xからyまで)
198  [...]   集合   (文字集合内文字集合)
199  ..&&..  積演算 (^の次に優先度が低い演算子)
200
201     例. [a-w&&[^c-g]z] ==> ([a-w] and ([^c-g] or z)) ==> [abh-w]
202
203  ※ '[', '-', ']'を、文字集合内で通常文字の意味で使用したい場合には、
204     これらの文字を'\'で退避修飾しなければならない。
205
206
207  POSIXブラケット ([:xxxxx:], 否定 [:^xxxxx:])
208
209    Unicode以外の場合:
210
211      alnum    英数字
212      alpha    英字
213      ascii    0 - 127
214      blank    \t, \x20
215      cntrl
216      digit    0-9
217      graph    多バイト文字全部を含む
218      lower
219      print    多バイト文字全部を含む
220      punct
221      space    \t, \n, \v, \f, \r, \x20
222      upper
223      xdigit   0-9, a-f, A-F
224      word     英数字, "_" および 多バイト文字
225
226    Unicodeの場合:
227
228      alnum    Letter | Mark | Decimal_Number
229      alpha    Letter | Mark
230      ascii    0000 - 007F
231      blank    Space_Separator | 0009
232      cntrl    Control | Format | Unassigned | Private_Use | Surrogate
233      digit    Decimal_Number
234      graph    [[:^space:]] && ^Control && ^Unassigned && ^Surrogate
235      lower    Lowercase_Letter
236      print    [[:graph:]] | [[:space:]]
237      punct    Connector_Punctuation | Dash_Punctuation | Close_Punctuation |
238               Final_Punctuation | Initial_Punctuation | Other_Punctuation |
239               Open_Punctuation
240      space    Space_Separator | Line_Separator | Paragraph_Separator |
241               U+0009 | U+000A | U+000B | U+000C | U+000D | U+0085
242      upper    Uppercase_Letter
243      xdigit   U+0030 - U+0039 | U+0041 - U+0046 | U+0061 - U+0066
244               (0-9, a-f, A-F)
245      word     Letter | Mark | Decimal_Number | Connector_Punctuation
246
247
248
2497. 拡張式集合
250
251  (?#...)           注釈
252
253  (?imxWDSPy-imxWDSP:式)   式オプション
254
255                            i: 大文字小文字照合
256                            m: 複数行
257                            x: 拡張形式
258                            W: wordがASCIIのみ (\w, \p{Word}, [[:word:]])
259                               word境界がASCIIのみ (\b)
260                            D: digitがASCIIのみ (\d, \p{Digit}, [[:digit:]])
261                            S: spaceがASCIIのみ (\s, \p{Space}, [[:space:]])
262                            P: POSIXプロパティがASCIIのみ (W,D,Sを全て含んでいる)
263                               (alnum, alpha, blank, cntrl, digit, graph,
264                                lower, print, punct, space, upper, xdigit, word)
265
266                            y{?}: 文章区分状態
267                               このオプションは\X, \y, \Yの意味を変更する。
268                               現在このオプションはUnicodeでしかサポートしていない
269                               y{g}: 拡張書記素房-状態 (デフォルト)
270                               y{w}: 単語-状態
271                                     参照 [Unicode Standard Annex #29]
272
273  (?imxWDSPy-imxWDSP)  孤立オプション
274
275                      * これは次の')'またはパターンの終わりまでのグループを形成する
276                        /ab(?i)c|def|gh/ == /ab(?i:c|def|gh)/
277
278
279  (式)              捕獲式集合
280  (?:式)            非捕獲式集合
281
282  (?=式)            先読み
283  (?!式)            否定先読み
284
285  (?<=式)           戻り読み
286  (?<!式)           否定戻り読み
287
288                    * 戻り読み、否定戻り読みの式の中では、不在停止演算子
289                      (?~|expr)と範囲消去演算子(?~|)を使用することはできない
290
291                    * 戻り読み、否定戻り読みの中では、ignore-caseオプションの
292                      対応が制限される。一文字と一文字の間の変換しか対応しない。
293                      (Unicodeでの複数文字の変換に対応しない)
294
295  (?>式)            原子的式集合
296                    式全体を通過したとき、式の中での後退再試行を行なわない
297
298  (?<name>式), (?'name'式)
299                    名前付き捕獲式集合
300                    式集合に名前を割り当てる(定義する)。
301                    (名前は単語構成文字でなければならない。)
302
303                    名前だけでなく、捕獲式集合と同様に番号も割り当てられる。
304                    番号指定が禁止されていない状態 (10. 捕獲式集合 を参照)
305                    のときは、名前を使わないで番号でも参照できる。
306
307                    複数の式集合に同じ名前を与えることは許されている。
308                    この場合には、この名前を使用した後方参照は可能であるが、
309                    部分式呼出しはできない。
310
311
312  <呼び出し>
313
314  * 内容の呼び出し
315  (?{...contents...})           前進中のみの呼び出し
316  (?{...contents...}D)          Dは方向指定文字
317                                D = 'X': 前進中および後退中
318                                    '<': 後退中のみ
319                                    '>': 前進中のみ
320  (?{...contents...}[tag])      名札付き
321  (?{...contents...}[tag]D)
322
323                              * エスケープ文字はcontentsの中で何の機能も持たない
324                              * contentsは、'{'文字で始まってはならない
325
326  (?{{{...contents...}}})     contentsの中のn個連続の'}'は、(n+1)個連続の{{{...}}}
327                              の中で許される
328
329    tagに許される文字: _ A-Z a-z 0-9 (* 最初の文字: _ A-Z a-z)
330
331
332  * 名前の呼び出し
333  (*name)
334  (*name{args...})         引数付き
335  (*name[tag])             名札付き
336  (*name[tag]{args...})
337
338    nameに許される文字: _ A-Z a-z 0-9 (* 最初の文字: _ A-Z a-z)
339    tag に許される文字: _ A-Z a-z 0-9 (* 最初の文字: _ A-Z a-z)
340
341
342
343  <不在機能群>
344
345  (?~不在)          不在繰り返し  (*原案 田中哲)
346                    これは .*(より正確には\O*)のように動作するが、<不在>に
347                    適合する文字列を含まない範囲に制限される。
348                    これは(?~|(?:不在)|\O*)の省略表記である。
349
350  (?~|不在|式)      不在式  (* 原作)
351                    これは<式>のように動作するが、<不在>に適合する文字列を
352                    含まない範囲に制限される。
353
354                    例 (?~|345|\d*)  "12345678"  ==> "12", "1", ""
355
356  (?~|不在)         不在停止 (* 原作)
357                    この演算子を通過した後は、対象文字列の適合範囲が
358                    <不在>に適合する文字列を含まない範囲に制限される。
359
360  (?~|)             範囲消去
361                    不在停止の効果を消して、それ以前の状態にする。
362
363     * 不在機能の入れ子には対応しておらず、その場合の挙動は不定とする。
364
365
366
367  <条件文>
368
369  (?(条件式)成功式|失敗式)    条件式が成功すれば成功式、失敗すれば失敗式を実行する
370                             この機能の存在理由は、成功式が失敗しても失敗式には
371                             行かないこと。これは他の正規表現で書くことができない。
372                             もうひとつは、条件式が後方参照の番号/名前のとき、
373                             後方参照値の有効性を調べる(文字列と照合はしない)
374                             意味になる。
375
376  (?(条件式)成功式)           条件式が成功すれば成功式を実行する
377                             (条件式が通常の式のときには、この構文は不必要だが
378                              今のところエラーにはしない。)
379
380
381                    条件式は後方参照の番号/名前または普通の式を使用できる。
382                    条件式が後方参照の場合、成功式と失敗式の両方を省略可能であり、
383                    この場合、後方参照値有効性を調べる(成功/失敗)機能のみになる。
384
385  [後方参照値有効性確認器]  (* 原作)
386    (?(n)), (?(-n)), (?(+n)), (?(n+level)) ...
387    (?(<n>)), (?('-n')), (?(<+n>)) ...
388    (?(<name>)), (?('name')), (?(<name+level>)) ...
389
390
391
3928. 後方参照
393
394  \n          番号指定参照     (n >= 1)
395  \k<n>       番号指定参照     (n >= 1)
396  \k'n'       番号指定参照     (n >= 1)
397  \k<-n>      相対番号指定参照 (n >= 1)
398  \k'-n'      相対番号指定参照 (n >= 1)
399  \k<+n>      相対番号指定参照 (n >= 1)
400  \k'+n'      相対番号指定参照 (n >= 1)
401  \k<name>    名前指定参照
402  \k'name'    名前指定参照
403
404  名前指定参照で、その名前が複数の式集合で多重定義されている場合には、
405  番号の大きい式集合から優先的に参照される。
406  (マッチしないときには番号の小さい式集合が参照される)
407
408  ※ 番号指定参照は、名前付き捕獲式集合が定義され、
409     かつ ONIG_OPTION_CAPTURE_GROUPが指定されていない場合には、
410     禁止される。(10. 捕獲式集合 を参照)
411
412
413  ネストレベル付き後方参照
414
415    level: 0, 1, 2, ...
416
417    \k<n+level>     (n >= 1)
418    \k<n-level>     (n >= 1)
419    \k'n+level'     (n >= 1)
420    \k'n-level'     (n >= 1)
421
422    \k<name+level>
423    \k<name-level>
424    \k'name+level'
425    \k'name-level'
426
427    後方参照の位置から相対的な部分式呼出しネストレベルを指定して、そのレベルでの
428    捕獲値を参照する。
429
430    例-1.
431
432      /\A(?<a>|.|(?:(?<b>.)\g<a>\k<b+0>))\z/.match("reer")
433
434    例-2.
435
436      r = Regexp.compile(<<'__REGEXP__'.strip, Regexp::EXTENDED)
437      (?<element> \g<stag> \g<content>* \g<etag> ){0}
438      (?<stag> < \g<name> \s* > ){0}
439      (?<name> [a-zA-Z_:]+ ){0}
440      (?<content> [^<&]+ (\g<element> | [^<&]+)* ){0}
441      (?<etag> </ \k<name+1> >){0}
442      \g<element>
443      __REGEXP__
444
445      p r.match('<foo>f<bar>bbb</bar>f</foo>').captures
446
447
448
4499. 部分式呼出し ("田中哲スペシャル")   (* 原作)
450
451  \g<name>    名前指定呼出し
452  \g'name'    名前指定呼出し
453  \g<n>       番号指定呼出し    (n >= 1)
454  \g'n'       番号指定呼出し    (n >= 1)
455  \g<0>       番号指定呼出し(全体呼び出し)
456  \g'0'       番号指定呼出し(全体呼び出し)
457  \g<-n>      相対番号指定呼出し (n >= 1)
458  \g'-n'      相対番号指定呼出し (n >= 1)
459  \g<+n>      相対番号指定呼出し (n >= 1)
460  \g'+n'      相対番号指定呼出し (n >= 1)
461
462  ※ 最左位置での再帰呼出しは禁止される。
463     例. (?<name>a|\g<name>b)   => error
464         (?<name>a|b\g<name>c)  => OK
465
466  ※ 番号指定呼出しは、名前付き捕獲式集合が定義され、
467     かつ ONIG_OPTION_CAPTURE_GROUPが指定されていない場合には、
468     禁止される。 (10. 捕獲式集合 を参照)
469
470  ※ 呼び出された式集合のオプション状態が呼出し側のオプション状態と異なっている
471     とき、呼び出された側のオプション状態が有効である。
472
473     例. (?-i:\g<name>)(?i:(?<name>a)){0} は "A" に照合成功する。
474
475
47610. 捕獲式集合
477
478  捕獲式集合(...)は、以下の条件に応じて振舞が変化する。
479  (名前付き捕獲式集合は変化しない)
480
481  case 1. /.../     (名前付き捕獲式集合は不使用、オプションなし)
482
483     (...) は、捕獲式集合として扱われる。
484
485  case 2. /.../g    (名前付き捕獲式集合は不使用、オプション 'g'を指定)
486
487     (...) は、非捕獲式集合として扱われる。
488
489  case 3. /..(?<name>..)../   (名前付き捕獲式集合は使用、オプションなし)
490
491     (...) は、非捕獲式集合として扱われる。
492     番号指定参照/呼び出しは不許可。
493
494  case 4. /..(?<name>..)../G  (名前付き捕獲式集合は使用、オプション 'G'を指定)
495
496     (...) は、捕獲式集合として扱われる。
497     番号指定参照/呼び出しは許可。
498
499  但し
500    g: ONIG_OPTION_DONT_CAPTURE_GROUP
501    G: ONIG_OPTION_CAPTURE_GROUP
502    ('g'と'G'オプションは、ruby-dev MLで議論された。)
503
504  これらの振舞の意味は、
505  名前付き捕獲と名前無し捕獲を同時に使用する必然性のある場面は少ないであろう
506  という理由から考えられたものである。
507
508
509-----------------------------
510補記 1. 文法依存オプション
511
512   + ONIG_SYNTAX_ONIGURUMA
513     (?m): 終止符記号(.)は改行と照合成功
514
515   + ONIG_SYNTAX_PERL と ONIG_SYNTAX_JAVA
516     (?s): 終止符記号(.)は改行と照合成功
517     (?m): ^ は改行の直後に照合する、$ は改行の直前に照合する
518
519
520補記 2. 独自拡張機能
521
522   + 16進数数字、非16進数字  \h, \H
523   + 真任意文字              \O
524   + 文章区分境界            \y, \Y
525   + 後方参照値有効性確認器  (?(...))
526   + 名前付き捕獲式集合      (?<name>...), (?'name'...)
527   + 名前指定後方参照        \k<name>
528   + 部分式呼出し            \g<name>, \g<group-num>
529   + 不在式                 (?~|...|...)
530   + 不在停止               (?|...)
531
532
533補記 3. Perl 5.8.0と比較して存在しない機能
534
535   + \N{name}
536   + \l,\u,\L,\U,\C
537   + (??{code})
538
539   * \Q...\E
540     但しONIG_SYNTAX_PERLとONIG_SYNTAX_JAVAでは有効
541
542
543補記 4. Ruby 1.8 の日本語化 GNU regex(version 0.12)との違い
544
545   + 文字Property機能追加 (\p{property}, \P{Property})
546   + 16進数字タイプ追加 (\h, \H)
547   + 戻り読み機能を追加
548   + 強欲な繰り返し指定子を追加 (?+, *+, ++)
549   + 文字集合の中の演算子を追加 ([...], &&)
550     ('[' は、文字集合の中で通常の文字として使用するときには
551      退避修飾しなければならない)
552   + 名前付き捕獲式集合と、部分式呼出し機能追加
553   + 多バイト文字コードが指定されているとき、
554     文字集合の中で八進数または十六進数表現の連続は、多バイト符号で表現された
555     一個の文字と解釈される
556     (例. [\xa1\xa2], [\xa1\xa7-\xa4\xa1])
557   + 文字集合の中で、一バイト文字と多バイト文字の範囲指定は許される。
558     ex. /[a-あ]/
559   + 孤立オプションの有効範囲は、その孤立オプションを含んでいる式集合の
560     終わりまでである
561     例. (?:(?i)a|b) は (?:(?i:a|b)) と解釈される、(?:(?i:a)|b)ではない
562   + 孤立オプションはその前の式に対して透過的ではない
563     例. /a(?i)*/ は文法エラーとなる
564   + 不完全な繰り返し範囲指定子は通常の文字列として許可される
565     例. /{/, /({)/, /a{2,3/
566   + 否定的POSIXブラケット [:^xxxx:] を追加
567   + POSIXブラケット [:ascii:] を追加
568   + 先読みの繰り返しは不許可
569     例. /(?=a)*/, /(?!b){5}/
570   + 数値で指定された文字に対しても、大文字小文字照合オプションは有効
571     例. /\x61/i =~ "A"
572   + 繰り返し回数指定で、最低回数の省略(0回)ができる
573     /a{,n}/ == /a{0,n}/
574     最低回数と最大回数の同時省略は許されない。(/a{,}/)
575   + /a{n}?/は無欲な演算子ではない。
576     /a{n}?/ == /(?:a{n})?/
577   + 無効な後方参照をチェックしてエラーにする。
578     /\1/, /(a)\2/
579   + 無限繰り返しの中で、長さ零での照合成功は繰り返しを中断させるが、
580     このとき、中断すべきかどうかの判定として、捕獲式集合の捕獲状態の
581     変化まで考慮している
582     /(?:()|())*\1\2/ =~ ""
583     /(?:\1a|())*/ =~ "a"
584
585終り
586