sitelogo
文書処理と正規表現

文字列、パターン・マッチング、スキャナのテキスト処理のための正規表現。 文書処理述語:

正規表現:

正規表現は、単純な文字とメタ文字の連続です。 メタ文字ではないではないすべての文字は、それ自身を 表わします。

例:

	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,


match/2/3
match_all/3
substitute/4
substitute_all/4
chop/2
split/2/3
get_line/1/2

戻る 続く..
冒頭へ managed with ubiCMS