| 文字列、パターン・マッチング、スキャナのテキスト処理のための正規表現。
文書処理述語:
- match/2/3
- match_all/3
- substitute/4
- substitute_all/4
- split/2/3
- chop/2
- get_line/1/2
正規表現:
正規表現は、単純な文字とメタ文字の連続です。
メタ文字ではないではないすべての文字は、それ自身を
表わします。
例:
a 文字 "a"を表します。
ab 文字列 "a"を表します。
%% 文字 "%"を表します。
メタキャラクター:
| 選言(disjunction)
(...) 括弧内に入っている式
. 何でも良いのでひとつの文字
^ 文字列の最初の位置
$ 文字列の最後の位置
%d 数字
%D 数字ではない文字
%s 空白
%w 単語の一文字(文字あるいは数字あるいは_)
%W 単語の一文字ではない。
%< 単語の始まり
例えば、現在の文字は、%wであって、前の文字は%wでない。
%> 単語の終わり
例えば、現在の文字は、%wではなく、前の文字は%wである。
大文字/小文字の区別
%i これ以降すべての文字は、大文字/小文字の区別がされる。
%I これ以降すべての文字は、大文字/小文字の区別がされない。
キャラクタのクラス
[...] リストされた文字のうちのひとつ
[^...] リストされた文字のうちのひとつではない。
"-"は、範囲を限定するためにクラス内で使われる。
例えば[a-zA-Z0-9_]は、%wと同じことを示す。
グループ化と予見
(?:...) 単純なグループ化(悪影響はない)
(?=...) 肯定的な予期
true if ... が続くが, ... は尽きない。
(?!...) 否定的な予期
true if ... は続かないが、何も尽きるものはない。
数量子
数量子は、接頭辞としてつけられる。
以下の接頭辞が定義されている。
* 何回あっても良い
+ 少なくとも一度は
? 全くない。
{min,max} "min" から "max" 回
{min,} 少なくとも "min" 回
{n} 正確に"n"回
数量子は、熱心に
マッチする文字列でできる限り長いものをを探そうとします。
できる限り短い文字列を見つけるためには、"?"を数に
付けます。
注意:アトムの中にバックスラッシュを入れる際には、
二度バックスラッシュを書いてください。
(アトムでないことを示す。)
式の中にパーセントマークをつけるときには、パーセントマーク
を二度書いてください。(正規表現でないことを示す。)
例:
match('(%d+)', 'one123four', L) => L = ['123']
match('(.*)a', barbara, L) => L = [barbar]
match('(.*?)a', barbara, L) => L = [b]
match_all('%<(%w+)', ' one two three ', L)
=> L = [one,two,three]
split('one two three', L) => L = [one,two,three]
chop(' one two ', L) => L = 'one two'
split('%s*:%s*', 'one : two :three', L)
=> L = [one,two,three]
substitute_all('a(.)', barbara, '%1a', L).
==> L = brabraa
単語の位置を交換するために使います。
substitute('(%w+) (%w+)', 'one two', '%2 %1', L).
==> L = 'two one'
括弧に入れられたユニット
括弧に入れられたものは、すべて、項として認識されます。右から左へi番目の
開いた括弧で括弧つけられたものはi番目の項として認識されます。
括弧に入った項は、substitute/4、substitute_all/4の中で,
置き換えられた式において、%1...%9としてあげられます。
match/3 と match_all/3では、対応するシーケンスでこれらは復帰されます。
括弧内の式の値が求められていないならば、例えば、それが、連結のなかで
あるために値が求められていないのであれば、結果は、' 'です。
例題:
match_all('((%w+)|(%s+))', 'a few tokens', L).
=> L = [[a,a,''],[' ','',' '],[few,few,''],[' ','',' '],[tokens,tokens,'']]
match_all('%<(%w+)', 'a few tokens', L).
=> L = [[a],[few],[tokens]]
以下も参照して下さい。
正規表現,
match/2/3,
match_all/3,
substitute/4,
substitute_all/4,
split/2/3,
chop/2,
get_line/1/2,
|