1鬼車 正規表現 Version 6.9.4 2019/10/31 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 {n,m}? (n <= m) n回以上 かつ m回以下 140 {n,}? n回以上 141 {,n}? 零回以上n回以下 (== {0,n}?) 142 143 強欲 (欲張りで、繰り返しに成功した後は回数を減らすような後退再試行をしない) 144 145 ?+ 一回または零回 146 *+ 零回以上 147 ++ 一回以上 148 {n,m} (n > m) m回以上 かつ n回以下 149 150 {n,m}+, {n,}+, {n}+ は、ONIG_SYNTAX_JAVAとONIG_SYNTAX_PERLでのみ強欲な指定子 151 152 例. /a*+/ === /(?>a*)/ 153 154 1555. 錨 156 157 ^ 行頭 158 $ 行末 159 \b 単語境界 160 \B 非単語境界 161 162 \A 文字列先頭 163 \Z 文字列末尾、または文字列末尾の改行の直前 164 \z 文字列末尾 165 \G 探索開始位置 166 \K 保持 (結果の開始位置をこの位置に保つ) 167 168 169 \y 文章区分 境界 170 \Y 文章区分 非境界 171 172 この演算子の意味は、オプション (?y{..})の設定によって変化する。 173 174 [拡張書記素房-状態のとき] (デフォルト) 175 Unicodeの場合: 176 参照 [Unicode Standard Annex #29: http://unicode.org/reports/tr29/] 177 178 Unicode以外の場合: 179 \rと\nの間を除く全ての位置 180 181 [単語-状態のとき] 182 現在、Unicodeしかサポートしていない。 183 参照 [Unicode Standard Annex #29: http://unicode.org/reports/tr29/] 184 185 186 1876. 文字集合 188 189 ^... 否定 (最低優先度演算子) 190 x-y 範囲 (xからyまで) 191 [...] 集合 (文字集合内文字集合) 192 ..&&.. 積演算 (^の次に優先度が低い演算子) 193 194 例. [a-w&&[^c-g]z] ==> ([a-w] and ([^c-g] or z)) ==> [abh-w] 195 196 ※ '[', '-', ']'を、文字集合内で通常文字の意味で使用したい場合には、 197 これらの文字を'\'で退避修飾しなければならない。 198 199 200 POSIXブラケット ([:xxxxx:], 否定 [:^xxxxx:]) 201 202 Unicode以外の場合: 203 204 alnum 英数字 205 alpha 英字 206 ascii 0 - 127 207 blank \t, \x20 208 cntrl 209 digit 0-9 210 graph 多バイト文字全部を含む 211 lower 212 print 多バイト文字全部を含む 213 punct 214 space \t, \n, \v, \f, \r, \x20 215 upper 216 xdigit 0-9, a-f, A-F 217 word 英数字, "_" および 多バイト文字 218 219 Unicodeの場合: 220 221 alnum Letter | Mark | Decimal_Number 222 alpha Letter | Mark 223 ascii 0000 - 007F 224 blank Space_Separator | 0009 225 cntrl Control | Format | Unassigned | Private_Use | Surrogate 226 digit Decimal_Number 227 graph [[:^space:]] && ^Control && ^Unassigned && ^Surrogate 228 lower Lowercase_Letter 229 print [[:graph:]] | [[:space:]] 230 punct Connector_Punctuation | Dash_Punctuation | Close_Punctuation | 231 Final_Punctuation | Initial_Punctuation | Other_Punctuation | 232 Open_Punctuation 233 space Space_Separator | Line_Separator | Paragraph_Separator | 234 U+0009 | U+000A | U+000B | U+000C | U+000D | U+0085 235 upper Uppercase_Letter 236 xdigit U+0030 - U+0039 | U+0041 - U+0046 | U+0061 - U+0066 237 (0-9, a-f, A-F) 238 word Letter | Mark | Decimal_Number | Connector_Punctuation 239 240 241 2427. 拡張式集合 243 244 (?#...) 注釈 245 246 (?imxWDSPy-imxWDSP:式) 式オプション 247 248 i: 大文字小文字照合 249 m: 複数行 250 x: 拡張形式 251 W: wordがASCIIのみ (\w, \p{Word}, [[:word:]]) 252 word境界がASCIIのみ (\b) 253 D: digitがASCIIのみ (\d, \p{Digit}, [[:digit:]]) 254 S: spaceがASCIIのみ (\s, \p{Space}, [[:space:]]) 255 P: POSIXプロパティがASCIIのみ (W,D,Sを全て含んでいる) 256 (alnum, alpha, blank, cntrl, digit, graph, 257 lower, print, punct, space, upper, xdigit, word) 258 259 y{?}: 文章区分状態 260 このオプションは\X, \y, \Yの意味を変更する。 261 現在このオプションはUnicodeでしかサポートしていない 262 y{g}: 拡張書記素房-状態 (デフォルト) 263 y{w}: 単語-状態 264 参照 [Unicode Standard Annex #29] 265 266 (?imxWDSPy-imxWDSP) 孤立オプション 267 268 * これは次の')'またはパターンの終わりまでのグループを形成する 269 /ab(?i)c|def|gh/ == /ab(?i:c|def|gh)/ 270 271 272 (式) 捕獲式集合 273 (?:式) 非捕獲式集合 274 275 (?=式) 先読み 276 (?!式) 否定先読み 277 (?<=式) 戻り読み 278 (?<!式) 否定戻り読み 279 280 戻り読みの式は固定文字長でなければならない。 281 しかし、最上位の選択子だけは異なった文字長が許される。 282 例. (?<=a|bc) は許可. (?<=aaa(?:b|cd)) は不許可 283 284 否定戻り読みでは、捕獲式集合は許されないが、 285 非捕獲式集合は許される。 286 287 * 戻り読み、否定戻り読みの中では、ignore-caseオプションの 288 対応が制限される。一文字と一文字の間の変換しか対応しない。 289 (Unicodeでの複数文字の変換に対応しない) 290 291 (?>式) 原子的式集合 292 式全体を通過したとき、式の中での後退再試行を行なわない 293 294 (?<name>式), (?'name'式) 295 名前付き捕獲式集合 296 式集合に名前を割り当てる(定義する)。 297 (名前は単語構成文字でなければならない。) 298 299 名前だけでなく、捕獲式集合と同様に番号も割り当てられる。 300 番号指定が禁止されていない状態 (10. 捕獲式集合 を参照) 301 のときは、名前を使わないで番号でも参照できる。 302 303 複数の式集合に同じ名前を与えることは許されている。 304 この場合には、この名前を使用した後方参照は可能であるが、 305 部分式呼出しはできない。 306 307 308 <呼び出し> 309 310 * 内容の呼び出し 311 (?{...contents...}) 前進中のみの呼び出し 312 (?{...contents...}D) Dは方向指定文字 313 D = 'X': 前進中および後退中 314 '<': 後退中のみ 315 '>': 前進中のみ 316 (?{...contents...}[tag]) 名札付き 317 (?{...contents...}[tag]D) 318 319 * エスケープ文字はcontentsの中で何の機能も持たない 320 * contentsは、'{'文字で始まってはならない 321 322 (?{{{...contents...}}}) contentsの中のn個連続の'}'は、(n+1)個連続の{{{...}}} 323 の中で許される 324 325 tagに許される文字: _ A-Z a-z 0-9 (* 最初の文字: _ A-Z a-z) 326 327 328 * 名前の呼び出し 329 (*name) 330 (*name{args...}) 引数付き 331 (*name[tag]) 名札付き 332 (*name[tag]{args...}) 333 334 nameに許される文字: _ A-Z a-z 0-9 (* 最初の文字: _ A-Z a-z) 335 tag に許される文字: _ A-Z a-z 0-9 (* 最初の文字: _ A-Z a-z) 336 337 338 339 <不在機能群> 340 341 (?~不在) 不在繰り返し (*原案 田中哲) 342 これは .*(より正確には\O*)のように動作するが、<不在>に 343 適合する文字列を含まない範囲に制限される。 344 これは(?~|(?:不在)|\O*)の省略表記である。 345 346 (?~|不在|式) 不在式 (* 原作) 347 これは<式>のように動作するが、<不在>に適合する文字列を 348 含まない範囲に制限される。 349 350 例 (?~|345|\d*) "12345678" ==> "12", "1", "" 351 352 (?~|不在) 不在停止 (* 原作) 353 この演算子を通過した後は、対象文字列の適合範囲が 354 <不在>に適合する文字列を含まない範囲に制限される。 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 (?(n)), (?(-n)), (?(+n)), (?(n+level)) ... 383 (?(<n>)), (?('-n')), (?(<+n>)) ... 384 (?(<name>)), (?('name')), (?(<name+level>)) ... 385 386 387 3888. 後方参照 389 390 \n 番号指定参照 (n >= 1) 391 \k<n> 番号指定参照 (n >= 1) 392 \k'n' 番号指定参照 (n >= 1) 393 \k<-n> 相対番号指定参照 (n >= 1) 394 \k'-n' 相対番号指定参照 (n >= 1) 395 \k<+n> 相対番号指定参照 (n >= 1) 396 \k'+n' 相対番号指定参照 (n >= 1) 397 \k<name> 名前指定参照 398 \k'name' 名前指定参照 399 400 名前指定参照で、その名前が複数の式集合で多重定義されている場合には、 401 番号の大きい式集合から優先的に参照される。 402 (マッチしないときには番号の小さい式集合が参照される) 403 404 ※ 番号指定参照は、名前付き捕獲式集合が定義され、 405 かつ ONIG_OPTION_CAPTURE_GROUPが指定されていない場合には、 406 禁止される。(10. 捕獲式集合 を参照) 407 408 409 ネストレベル付き後方参照 410 411 level: 0, 1, 2, ... 412 413 \k<n+level> (n >= 1) 414 \k<n-level> (n >= 1) 415 \k'n+level' (n >= 1) 416 \k'n-level' (n >= 1) 417 418 \k<name+level> 419 \k<name-level> 420 \k'name+level' 421 \k'name-level' 422 423 後方参照の位置から相対的な部分式呼出しネストレベルを指定して、そのレベルでの 424 捕獲値を参照する。 425 426 例-1. 427 428 /\A(?<a>|.|(?:(?<b>.)\g<a>\k<b+0>))\z/.match("reer") 429 430 例-2. 431 432 r = Regexp.compile(<<'__REGEXP__'.strip, Regexp::EXTENDED) 433 (?<element> \g<stag> \g<content>* \g<etag> ){0} 434 (?<stag> < \g<name> \s* > ){0} 435 (?<name> [a-zA-Z_:]+ ){0} 436 (?<content> [^<&]+ (\g<element> | [^<&]+)* ){0} 437 (?<etag> </ \k<name+1> >){0} 438 \g<element> 439 __REGEXP__ 440 441 p r.match('<foo>f<bar>bbb</bar>f</foo>').captures 442 443 444 4459. 部分式呼出し ("田中哲スペシャル") (* 原作) 446 447 \g<name> 名前指定呼出し 448 \g'name' 名前指定呼出し 449 \g<n> 番号指定呼出し (n >= 1) 450 \g'n' 番号指定呼出し (n >= 1) 451 \g<0> 番号指定呼出し(全体呼び出し) 452 \g'0' 番号指定呼出し(全体呼び出し) 453 \g<-n> 相対番号指定呼出し (n >= 1) 454 \g'-n' 相対番号指定呼出し (n >= 1) 455 \g<+n> 相対番号指定呼出し (n >= 1) 456 \g'+n' 相対番号指定呼出し (n >= 1) 457 458 ※ 最左位置での再帰呼出しは禁止される。 459 例. (?<name>a|\g<name>b) => error 460 (?<name>a|b\g<name>c) => OK 461 462 ※ 番号指定呼出しは、名前付き捕獲式集合が定義され、 463 かつ ONIG_OPTION_CAPTURE_GROUPが指定されていない場合には、 464 禁止される。 (10. 捕獲式集合 を参照) 465 466 ※ 呼び出された式集合のオプション状態が呼出し側のオプション状態と異なっている 467 とき、呼び出された側のオプション状態が有効である。 468 469 例. (?-i:\g<name>)(?i:(?<name>a)){0} は "A" に照合成功する。 470 471 47210. 捕獲式集合 473 474 捕獲式集合(...)は、以下の条件に応じて振舞が変化する。 475 (名前付き捕獲式集合は変化しない) 476 477 case 1. /.../ (名前付き捕獲式集合は不使用、オプションなし) 478 479 (...) は、捕獲式集合として扱われる。 480 481 case 2. /.../g (名前付き捕獲式集合は不使用、オプション 'g'を指定) 482 483 (...) は、非捕獲式集合として扱われる。 484 485 case 3. /..(?<name>..)../ (名前付き捕獲式集合は使用、オプションなし) 486 487 (...) は、非捕獲式集合として扱われる。 488 番号指定参照/呼び出しは不許可。 489 490 case 4. /..(?<name>..)../G (名前付き捕獲式集合は使用、オプション 'G'を指定) 491 492 (...) は、捕獲式集合として扱われる。 493 番号指定参照/呼び出しは許可。 494 495 但し 496 g: ONIG_OPTION_DONT_CAPTURE_GROUP 497 G: ONIG_OPTION_CAPTURE_GROUP 498 ('g'と'G'オプションは、ruby-dev MLで議論された。) 499 500 これらの振舞の意味は、 501 名前付き捕獲と名前無し捕獲を同時に使用する必然性のある場面は少ないであろう 502 という理由から考えられたものである。 503 504 505----------------------------- 506補記 1. 文法依存オプション 507 508 + ONIG_SYNTAX_ONIGURUMA 509 (?m): 終止符記号(.)は改行と照合成功 510 511 + ONIG_SYNTAX_PERL と ONIG_SYNTAX_JAVA 512 (?s): 終止符記号(.)は改行と照合成功 513 (?m): ^ は改行の直後に照合する、$ は改行の直前に照合する 514 515 516補記 2. 独自拡張機能 517 518 + 16進数数字、非16進数字 \h, \H 519 + 真任意文字 \O 520 + 文章区分境界 \y, \Y 521 + 後方参照値有効性確認器 (?(...)) 522 + 名前付き捕獲式集合 (?<name>...), (?'name'...) 523 + 名前指定後方参照 \k<name> 524 + 部分式呼出し \g<name>, \g<group-num> 525 + 不在式 (?~|...|...) 526 + 不在停止 (?|...) 527 528 529補記 3. Perl 5.8.0と比較して存在しない機能 530 531 + \N{name} 532 + \l,\u,\L,\U,\C 533 + (??{code}) 534 535 * \Q...\E 536 但しONIG_SYNTAX_PERLとONIG_SYNTAX_JAVAでは有効 537 538 539補記 4. Ruby 1.8 の日本語化 GNU regex(version 0.12)との違い 540 541 + 文字Property機能追加 (\p{property}, \P{Property}) 542 + 16進数字タイプ追加 (\h, \H) 543 + 戻り読み機能を追加 544 + 強欲な繰り返し指定子を追加 (?+, *+, ++) 545 + 文字集合の中の演算子を追加 ([...], &&) 546 ('[' は、文字集合の中で通常の文字として使用するときには 547 退避修飾しなければならない) 548 + 名前付き捕獲式集合と、部分式呼出し機能追加 549 + 多バイト文字コードが指定されているとき、 550 文字集合の中で八進数または十六進数表現の連続は、多バイト符号で表現された 551 一個の文字と解釈される 552 (例. [\xa1\xa2], [\xa1\xa7-\xa4\xa1]) 553 + 文字集合の中で、一バイト文字と多バイト文字の範囲指定は許される。 554 ex. /[a-あ]/ 555 + 孤立オプションの有効範囲は、その孤立オプションを含んでいる式集合の 556 終わりまでである 557 例. (?:(?i)a|b) は (?:(?i:a|b)) と解釈される、(?:(?i:a)|b)ではない 558 + 孤立オプションはその前の式に対して透過的ではない 559 例. /a(?i)*/ は文法エラーとなる 560 + 不完全な繰り返し範囲指定子は通常の文字列として許可される 561 例. /{/, /({)/, /a{2,3/ 562 + 否定的POSIXブラケット [:^xxxx:] を追加 563 + POSIXブラケット [:ascii:] を追加 564 + 先読みの繰り返しは不許可 565 例. /(?=a)*/, /(?!b){5}/ 566 + 数値で指定された文字に対しても、大文字小文字照合オプションは有効 567 例. /\x61/i =~ "A" 568 + 繰り返し回数指定で、最低回数の省略(0回)ができる 569 /a{,n}/ == /a{0,n}/ 570 最低回数と最大回数の同時省略は許されない。(/a{,}/) 571 + /a{n}?/は無欲な演算子ではない。 572 /a{n}?/ == /(?:a{n})?/ 573 + 無効な後方参照をチェックしてエラーにする。 574 /\1/, /(a)\2/ 575 + 無限繰り返しの中で、長さ零での照合成功は繰り返しを中断させるが、 576 このとき、中断すべきかどうかの判定として、捕獲式集合の捕獲状態の 577 変化まで考慮している 578 /(?:()|())*\1\2/ =~ "" 579 /(?:\1a|())*/ =~ "a" 580 581終り 582