Match regexの使い方 - その3
日付 | 2008/08/25 |
---|---|
ID | 08-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を有効にしているので、途中の改行コードも.でマッチします。