正規表現
一般的な Mathematica のパターンは,文字列操作のための強力な方法を提供する.しかし,特殊な文字列操作言語に精通している場合には,「正規表現」記号を用いて文字列パターンを指定したいと思うことがあるだろう.そのような場合,Mathematica ではRegularExpressionオブジェクトを用いる.
| RegularExpression["regex"] |
| In[1]:= |
| Out[1]= |
| In[2]:= |
| Out[2]= |
| In[3]:= |
| Out[3]= |
Mathematica のRegularExpressionは,標準的な正規表現のコンストラクトすべてをサポートする.
| c | そのままの文字 c |
| . | 改行以外の任意の文字 |
| [c1c2...] | |
| [c1-c2] | |
| [^c1c2...] | |
| p* | 繰り返されたあるいは繰り返されない p |
| p+ | 繰り返された p |
| p? | p があるかないか |
| p{m,n} | m 回からn 回繰り返された p |
| p*?, p+?, p?? | マッチする最短の文字列 |
| (p1p2...) | |
| p1|p2 |
| In[4]:= |
| Out[4]= |
| In[5]:= |
| Out[5]= |
多くの正規表現コンストラクトと基本的な一般的 Mathematica 文字列パターンコンストラクトとの間には,密接な対応関係がある.
| . | _ (厳密に Except["\n"]) |
| [c1c2...] | Characters["c1c2..."] |
| [c1-c2] | CharacterRange["c1","c2"] |
| [^c1c2...] | Except[Characters["c1c2..."]] |
| p* | p... |
| p+ | p.. |
| p? | p|"" |
| p*?, p+?, p?? | Shortest[p...],... |
| (p1p2...) | (p1~~p2~~...) |
| p1|p2 | p1|p2 |
一般的な Mathematica の文字列パターンに見られるように,種々の文字の一般的なクラスを表す正規表現の表記法もある.Mathematica の正規表現文字列にこれらの記号を入れる際には,二重のバックスラッシュ(
)を使わなければならないので注意のこと.
| \\d | 0から9までの数字 (DigitCharacter) |
| \\D | 数字以外 (Except[DigitCharacter]) |
| \\s | 空白,改行,タブ,その他の空白文字(WhitespaceCharacter) |
| \\S | 空白文字以外 (Except[WhitespaceCharacter]) |
| \\w | 文字記号(文字,数字,あるいは |
| \\W | 非文字記号 (Except[WordCharacter]) |
| [[:class:]] | 名前付きクラス内の記号 |
| [^[:class:]] | 名前付きクラスには含まれない記号 |
| In[6]:= |
| Out[6]= |
| In[7]:= |
| Out[7]= |
Mathematica は,標準的なPOSIX文字クラスの
,
,
,
,
,
,
,
,
,
,
,
,
,
をサポートする.
| In[8]:= |
| Out[8]= |
| In[9]:= |
| Out[9]= |
| ^ | 文字列の先頭 (StartOfString) |
| $ | 文字列の末尾 (EndOfString) |
| \\b | 単語の境界 (WordBoundary) |
| \\B | 単語の境界以外の任意の場所 (Except[WordBoundary]) |
一般な Mathematica のパターンでは,
や
のようなコンストラクトを使って,マッチするオブジェクトに任意の名前を与えることができる.正規表現では,数字を使ってこれと同じようなことをする方法がある.正規表現中の n
番目のカッコに入ったパターンオブジェクト(p)は,パターン本体内では\\n として,パターンの外では
として参照することができる.
| In[10]:= |
| Out[10]= |
| In[11]:= |
| Out[11]= |
| In[12]:= |
| Out[12]= |
| In[13]:= |
| Out[13]= |
