正規表現

R のパターンマッチ関数 grepmatch、文字列置換関数 sub などの関数は、正規表現に対応している。正規表現に用いるメタ文字は、以下に示したようなものがある。

( )複数の文字を一つのパターンとしてまとめる。
[ ]クラスです。[ ]に囲まれた文字列のうちいずれかの1文字を表す。
$後尾
^先頭、また[ ]の中で使うと、「それ以外」を表す。
?直前のパターンが、0 回または 1 回だけ繰り返すことを表す。
*直前のパターンが、0 回以上に繰り返すことを表す。
+直前のパターンが、1 回以上に繰り返すことを表す。
{2,5}前出パターンが、2 回以上 5 回以下に繰り返すことを表す。
.任意の一文字を表します。
|「または」を表します。
\メタ文字をエスケープする際に用いる。

正規表現の例。

# 最初から最後までがアルファベットと数値のみで表現される文字列
grep("^[[:alnum:]]+$", x)

# ATTまたはATCまたはACTを含む文字列
grep("(ATT|ATC|ACT)", x)

# ATTまたはATCまたはACTで終わる文字列
grep("(ATT|ATC|ACT)$", x)

# A,C,G,T,U,Xのみからなる文字列
grep("[^ACGTUX]", x)

# A,C,G,T,U,X以外も文字を含む文字列
grep("[^ACGTUX]", x)

# セリンに表すコドンを含む文字列(セリン:UCU, UCC, UCA, UCG, AGU, AGC)
grep("(UC.|AG[CU])", x)

# GCが2つ以上連続するパターンを含む文字列
grep("(GC){2,}" ,x)

# GCまたはCGが2つ以上連続するパターンを含む文字列
grep("(GC|CG){2,}" ,x)

後方参照

R で後方参照を行うため方法が用意されていない。後方参照用の関数を自作するか、後方参照をサポートするパッケージをインストールして利用するか、で対応する。ここでは、regexpr の属性を利用して後方参照を実現する例を示す。

# 文字列を用意
x <- c("CATTCGTAC", "GGCGAT", "TCGTATTGCATCAG", "ACCGTA")

# 正規表現によるマッチング
m <- regexpr("A.T", x)

# m にはマッチング箇所の開始位置が代入されている
# mのmatch.length属性にはマッチング箇所の終了位置が代入されている

# マッチング箇所の開始位置から終了位置を取得する
back_ref <- substr(x, m, m + attr(m, "match.length") - 1)

back_ref
## [1] "ATT" ""    "ATT" ""