AZ-Prologに付属している動作確認用のプログラムを読み込んで実行します。
>cd %AZProlog%¥sample¥ext >prolog -s oniguruma.pl | ?- test.
:- dlib_require(oniguruma).
onig_pattern_compile(+PATTERN, -REGEX)
PATTERN | 正規表現パターン (アトム/文字列) |
REGEX | 作成された正規表現オブジェクト |
不正なパターンを指定すると失敗する。
<例>onig_pattern_compile('^[a-z]+', REGEX).
※正規表現パターンの文法については、以下を参照。
www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt
これと同じファイルが、インストールしたときの.../oniguruma/doc/RE.jaファイルとして存在するので、これを参照しても良いが、EUC-JPで書かれている。
onig_pattern_free(+REGEX)
たくさん正規表現を使用するのでなければ、実行しなくてもよいかもしれない。
onig_pattern_error_info(+PATTERN, -ERR)
PATTERN | 正規表現パターン (アトム/文字列) |
ERR | エラー情報のアトム |
<例>onig_pattern_error_info('(', ERR).
==> ERR = 'end pattern with unmatched parenthesis'
onig_make_target_string(+STRING, -TARGET_STRING)
STRING | AZ-Prologの文字列(リスト)/アトム |
TARGET_STRING | 正規表現ライブラリで対象とする文字列オブジェクト |
このライブラリはPrologの文字列を直接検索できないので、この述語によって変換したものを作成する必要がある。
改行文字(列)の変換も同時に行われる。
"¥r¥n" ==> "¥n"
31 ==> "¥n" (31: AZ-Prologの改行コード)
対象文字列オブジェクトに対する操作、検索結果のcapture(捕獲)文字列に改行が含まれる場合には、上記の改行コードの変換が行われたものが入っている。
onig_free_target_string(+TARGET_STRING)
onig_target_string_part(+TARGET_STRING, +START, +END, -PART_STRING)
TARGET_STRING | 検索対象文字列オブジェクト |
START | 開始位置 (先頭は0) バイト単位 |
END | 終了位置 (この位置の文字は含まれない) バイト単位 |
PART_STRING | 部分文字列 (AZ-Prologのリスト) |
この述語は検索に直接必要なわけではない。
REGEX | 正規表現オブジェクト |
TARGET_STRING | 検索対象文字列オブジェクト |
START | 検索開始位置 (先頭は0) バイト単位 |
END | 検索終了位置 (文字列の終わりまでなら未定義でもよい) バイト単位 |
MSTART | マッチした文字列の開始位置 バイト単位 |
MEND | マッチした文字列の終了位置 バイト単位 |
CAPTURES | captureグループ(捕獲式集合)のcapture文字列のリスト |
¥ | 退避修飾 (エスケープ) 正規表現記号の有効/無効の制御 |
---|---|
| | 選択子 |
(...) | 式集合 (グループ) |
[...] | 文字集合 (文字クラス) |
¥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 | 超 + 制御文字表現 | コードポイント値 |
. | 任意文字 (改行を除く) |
---|---|
¥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 | + 全てのエンコーディングで有効 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 |
欲張り | |
---|---|
? | 1回または0回 |
* | 0回以上 |
+ | 1回以上 |
{n,m} | n回以上m回以下 |
{n,} | n回以上 |
{,n} | 0回以上n回以下 ({0,n}) |
{n} | n回 |
無欲 | |
?? | 1回または0回 |
*? | 0回以上 |
+? | 1回以上 |
{n,m}? | n回以上m回以下 |
{n,}? | n回以上 |
{,n}? | 0回以上n回以下 (== {0,n}?) |
強欲 (欲張りで、繰り返しに成功した後は回数を減らすような後退再試行をしない) | |
?+ | 1回または0回 |
*+ | 0回以上 |
++ | 1回以上 |
({n,m}+, {n,}+, {n}+ は、ONIG_SYNTAX_JAVAでのみ強欲な指定子)
例. /a*+/ === /(?>a*)/
^ | 行頭 |
---|---|
$ | 行末 |
¥b | 単語境界 |
¥B | 非単語境界 |
¥A | 文字列先頭 |
¥Z | 文字列末尾、または文字列末尾の改行の直前 |
¥z | 文字列末尾 |
¥G | 照合開始位置 |
^... | 否定 (最低優先度演算子) |
---|---|
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 | ||
多バイト文字全部を含む | ||
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 | |
[[: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 |
(?#...) | 注釈 |
---|---|
(?imx-imx) | 孤立オプション i: 大文字小文字照合 m: 複数行 x: 拡張形式 |
(?imx-imx:式) | 式オプション |
(式) | 捕獲式集合 |
(?:式) | 非捕獲式集合 |
(?=式) | 先読み |
(?!式) | 否定先読み |
(?<=式) | 戻り読み |
(?<!式) | 否定戻り読み 戻り読みの式は固定文字長でなければならない。 しかし、最上位の選択子だけは異なった文字長が許される。 例. (?<=a|bc) は許可. (?<=aaa(?:b|cd)) は不許可 否定戻り読みでは、捕獲式集合は許されないが、非捕獲式集合は許される。 |
(?>式) | 原子的式集合 式全体を通過したとき、式の中での後退再試行を行なわない |
(?<name›式) | 名前付き捕獲式集合 式集合に名前を割り当てる(定義する)。 (名前は単語構成文字でなければならない。) 名前だけでなく、捕獲式集合と同様に番号も割り当てられる。 番号指定が禁止されていない状態 (10. 捕獲式集合 を参照)のときは、名前を使わないで番号でも参照できる。 複数の式集合に同じ名前を与えることは許されている。 この場合には、この名前を使用した後方参照は可能であるが、部分式呼出しはできない。 |
¥n | 番号指定参照 (n >= 1) |
---|---|
¥k‹name› | 名前指定参照 |
/¥A(?<a>|.|(?:(?<b>.)¥g<a>¥k<b+0>))¥z/.match("reer")
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
¥g<name> | 名前指定呼出し |
---|---|
¥g<n> | 番号指定呼出し (n >= 1) |
捕獲式集合(...)は、以下の条件に応じて振舞が変化する。
(名前付き捕獲式集合は変化しない)
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で議論された。) これらの振舞の意味は、名前付き捕獲と名前無し捕獲を同時に使用する必然性のある場面は少ないであろうという理由から考えられたものである。 |