Tips

Match regexの使い方 - その3

日付2008/08/25
ID08-025
バージョン11
プラットフォームMac & Win

ICUの正規表現では、デフォルトの設定で大文字と小文字を区別する、入力中の個々の改行・新規行で^と$をマッチしない、改行コードで.をマッチしない、というルールになっています。こうした設定は、フラグを切り替えることにより、変更することができます。

\n(nは自然数)

n番目のグループにマッチした文字列でマッチします。たとえば、1番目のグループが("?)だった場合、"がひとつ、あるいは空の文字列でマッチするので、正規表現の後半で\1と記述した部分には1番目のグループが"でマッチした場合には"、空の文字列でマッチした場合には空の文字列になります。

例:

$i:=1
$Regex_t:="(\"?)(.*?)(\\1)(,\\s*)"

While (Match regex($Regex_t;$SourceText_t;$i;$Positions_al;$Lengths_al))			
		APPEND TO ARRAY($Strings_at;Substring($SourceText_t;$Positions_al{2};$Lengths_al{2}))
		$i:=$Positions_al{4}+$Lengths_al{4}
End while 

渡された文字列が「"aaa", bbb, "ccc"」のようにダブルクオートの使用が徹底されていなくても、配列には文字列の内容が代入されます。第1グループが開クオートでマッチすれば、第3グループは閉クオートでマッチするからです。

$

入力内容の末尾でマッチします。入力内容に含まれる個々の改行ではマッチしません。ただし、UREGEX_MULTILINEフラグを有効にすれば、入力内容に含まれる個々の改行でもマッチします。

\n

ラインフィード、つまり\u000Aでマッチします。あらゆる文字でマッチする.は、改行コードではマッチしません。ただし、UREGEX_DOTALLフラグを有効にすれば、改行コード(CR+LFでひとつの.)でマッチします。

\r

キャリッジリターン、つまり\u000Dでマッチします。あらゆる文字でマッチする.は、改行コードではマッチしません。ただし、UREGEX_DOTALLフラグを有効にすれば、改行コード(CR+LFでひとつの.)でマッチします。

^

入力内容の冒頭でマッチします。入力内容に含まれる個々の新規行ではマッチしません。ただし、UREGEX_MULTILINEフラグを有効にすれば、入力内容に含まれる個々の新規行でもマッチします。

\A

入力内容の冒頭でマッチします。UREGEX_MULTILINEフラグを有効にしても、入力内容に含まれる個々の新規行ではマッチしません。

(?m:...)

...の部分をUREGEX_MULTILINEフラグを有効にして評価します。

(?m)

UREGEX_MULTILINEフラグを有効に切り替えます。

(?-m:...)

...の部分をUREGEX_MULTILINEフラグを無効にして評価します。

(?-m)

UREGEX_MULTILINEフラグを無効に切り替えます。

例:

$i:=1
$Regex_t:="(.*)(:=)(?m)(.*$)"

While (Match regex($Regex_t;$SourceText_t;$i;$Positions_al;$Lengths_al))			
		APPEND TO ARRAY($Strings_at;Substring($SourceText_t;$Positions_al{0};$Lengths_al{0}))
		$i:=$Positions_al{4}+$Lengths_al{4}
End while 

代入文を抽出します。UREGEX_MULTILINEフラグを有効にしているので、個々の改行で$がマッチします。

(?s:...)

...の部分をUREGEX_DOTALLフラグを有効にして評価します。

(?s)

UREGEX_DOTALLフラグを有効に切り替えます。

(?-s:...)

...の部分をUREGEX_DOTALLフラグを無効にして評価します。

(?-s)

UREGEX_DOTALLフラグを無効に切り替えます。

例:

if(Match regex("(?m)(^begin applescript)(?s)(.*?)(?m)(^end applescript)";_TEXTMETHOD;$i;$MatchPositions_al;$MatchLengths_al))
End if

"begin applescript"と"end applescript"に括られたテキストを取り出します。UREGEX_DOTALLを有効にしているので、途中の改行コードも.でマッチします。

フラグについて

http://icu-project.org/userguide/regexp.html