正規表現

一般的なWolfram言語のパターンは,文字列操作のための強力な方法を提供する.しかし,特殊な文字列操作言語に精通している場合には,「正規表現」記号を用いて文字列パターンを指定したいと思うことがあるだろう.そのような場合,Wolfram言語ではRegularExpressionオブジェクトを用いる.

RegularExpression["regex"] で指定する正規表現

Wolfram言語で正規表現表記を用いる

すべてのあるいはを置換する.
In[1]:=
Click for copyable input
Out[1]=
通常のWolfram言語文字列パターンを用いて同様の操作を指定する.
In[2]:=
Click for copyable input
Out[2]=
正規表現と一般のパターンを混ぜて使うこともできる.
In[3]:=
Click for copyable input
Out[3]=

Wolfram言語の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あるいは にマッチする文字列

Wolfram言語正規表現の基本的なコンストラクト

これは,指定された正規表現式にマッチする部分文字列を見付ける.
In[4]:=
Click for copyable input
Out[4]=
これは,一般的なWolfram言語の文字列パターンを使って同様の操作を行う.
In[5]:=
Click for copyable input
Out[5]=

多くの正規表現コンストラクトと基本的な一般的Wolfram言語文字列パターンコンストラクトとの間には,密接な対応関係がある.

._ (厳密に 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|p2p1|p2

正規表現と一般的な文字列パターンコンストラクトとの対応関係

一般的なWolfram言語の文字列パターンに見られるように,種々の文字の一般的なクラスを表す正規表現の表記法もある.Wolfram言語の正規表現文字列にこれらの記号を入れる際には,二重のバックスラッシュ()を使わなければならないので注意のこと.

\\d0から9までの数字 (DigitCharacter)
\\D数字以外 (Except[DigitCharacter])
\\s空白,改行,タブ,その他の空白文字(WhitespaceCharacter)
\\S空白文字以外 (Except[WhitespaceCharacter])
\\w文字記号(文字,数字,あるいは (WordCharacter)
\\W非文字記号 (Except[WordCharacter])
[[:class:]]名前付きクラス内の記号
[^[:class:]]名前付きクラスには含まれない記号

文字記号のクラスに対応する正規表現表記

これは,に数字が続くものを与える.
In[6]:=
Click for copyable input
Out[6]=
これは,上と同様のことを一般的なWolfram言語の文字列パターンで行うものである.
In[7]:=
Click for copyable input
Out[7]=

Wolfram言語は,標準的なPOSIX文字クラスのをサポートする.

これで,一連の大文字を求める.
In[8]:=
Click for copyable input
Out[8]=
これは,上記と同じことをする.
In[9]:=
Click for copyable input
Out[9]=
^文字列の先頭 (StartOfString)
$文字列の末尾 (EndOfString)
\\b単語の境界 (WordBoundary)
\\B単語の境界以外の任意の場所 (Except[WordBoundary])

文字列中の位置を表す正規表現表記

一般なWolfram言語のパターンでは, のようなコンストラクトを使って,マッチするオブジェクトに任意の名前を与えることができる.正規表現では,数字を使ってこれと同じようなことをする方法がある.正規表現中の n 番目のカッコに入ったパターンオブジェクト(p)は,パターン本体内では\\n として,パターンの外では として参照することができる.

これは,一緒に現れる同一文字のペアを求める.
In[10]:=
Click for copyable input
Out[10]=
こちらは,一般的なWolfram言語の文字列パターンを使って同様のことをする.
In[11]:=
Click for copyable input
Out[11]=
に一致する文字を参照する.
In[12]:=
Click for copyable input
Out[12]=
これはWolfram言語のパターンバージョンである.
In[13]:=
Click for copyable input
Out[13]=