Main Content

regexprep

正規表現を使用したテキストの置換

説明

newStr = regexprep(str,expression,replace) は、replace で記述されたテキストで、expression と一致する str 内のテキストを置き換えます。関数 regexprepnewStr に更新されたテキストを返します。

  • str が 1 つのテキスト (文字ベクトルまたは string スカラー) である場合、newStr も同じ型の 1 つのテキストとなります。newStrexpression または replace が文字ベクトルの cell 配列または string 配列であったとしても 1 つのテキストとなります。expression が cell 配列または string 配列の場合、regexprep は最初の表現を str に適用してから、後続の各表現を前の結果に適用します。

  • str が cell 配列または string 配列の場合、newStrstr と同じ次元の cell 配列または string 配列です。str の各要素に対して、regexprep 関数は各表現を順に適用します。

  • expression との一致が検出されない場合、newStrstr と等価になります。

newStr = regexprep(str,expression,replace,option1,...optionM) は、指定されたオプションを使って検索を修正します。たとえば、'ignorecase' を指定すると、大文字小文字を区別しない検索が実行されます。

すべて折りたたむ

M で始まり、y で終わり、その間に少なくとも 1 文字が存在する単語を置き換えます。

str = 'My flowers may bloom in May';
expression = 'M(\w+)y';
replace = 'April';

newStr = regexprep(str,expression,replace)
newStr = 
'My flowers may bloom in April'

'walk' に続く文字をトークンにキャプチャすることで、語句 'walk up' の変化形を置き換えます。

str = 'I walk up, they walked up, we are walking up.';
expression = 'walk(\w*) up';
replace = 'ascend$1';

newStr = regexprep(str,expression,replace)
newStr = 
'I ascend, they ascended, we are ascending.'

関数 upper を使用して、文の先頭の小文字を同等の大文字に置き換えます。

str = 'here are two sentences. neither is capitalized.';
expression = '(^|\.)\s*.';
replace = '${upper($0)}';

newStr = regexprep(str,expression,replace)
newStr = 
'Here are two sentences. Neither is capitalized.'

この正規表現は、文字ベクトル (^) の先頭の後に続く単一文字 (.) またはピリオド ((\.)) および任意の空白文字 ((\s*)) と一致します。式 replace は、現在一致する文字 ($0) に対して upper 関数を呼び出します。

一連の文字ベクトル内に出現する重複文字をすべて記号 '--' に置き換えます。

str = {                                 ...
'Whose woods these are I think I know.' ; ...
'His house is in the village though;'   ; ...
'He will not see me stopping here'      ; ...
'To watch his woods fill up with snow.'};

expression = '(.)\1';
replace = '--';
newStr = regexprep(str,expression,replace)
newStr = 4x1 cell
    {'Whose w--ds these are I think I know.'}
    {'His house is in the vi--age though;'  }
    {'He wi-- not s-- me sto--ing here'     }
    {'To watch his w--ds fi-- up with snow.'}

一致の検索時に正規表現の大文字と小文字を無視しますが、更新時に元のテキストの大文字小文字を維持します。

str = 'My flowers may bloom in May';
expression = 'M(\w+)y';
replace = 'April';

newStr = regexprep(str,expression,replace,'preservecase')
newStr = 
'My flowers april bloom in April'

'^' 演算子を使用して、文字ベクトルの先頭にテキストを挿入します。これにより、長さがゼロの一致とキーワード 'emptymatch' が返されます。

str = 'abc';
expression = '^';
replace = '__';

newStr = regexprep(str,expression,replace,'emptymatch')
newStr = 
'__abc'

入力引数

すべて折りたたむ

更新するテキスト。文字ベクトル、文字ベクトルの cell 配列または string 配列として指定します。

データ型: char | cell | string

正規表現。文字ベクトル、文字ベクトルの cell 配列または string 配列として指定します。各式には、文字、メタ文字、演算子、トークンおよび str と一致するパターンを指定するフラグを含めることができます。

次の表では、正規表現の要素を説明します。

メタ文字

メタ文字は、文字、文字範囲、桁および空白文字を表します。メタ文字を使用して文字の汎用パターンを構築します。

メタ文字

説明

.

空白を含む任意の単一文字

'..ain' は、'ain' で終わる 5 つの連続する文字のシーケンスと一致します。

[c1c2c3]

大かっこ内の任意の文字。次の文字は文字どおり扱われます。$ | . * + ? および - (範囲を示すために使用する場合を除く)。

'[rp.]ain''rain''pain' または '.ain' と一致します。

[^c1c2c3]

大かっこ内を除く任意の文字。次の文字は文字どおり扱われます。$ | . * + ? および - (範囲を示すために使用する場合を除く)。

'[^*rp]ain''ain' で終わる 4 文字のシーケンスと一致します。ただし、'rain''pain' および '*ain' は除きます。たとえば、'gain''lain' または 'vain' と一致します。

[c1-c2]

c1c2 の範囲の任意の文字

'[A-G]' は、AG の範囲の 1 文字と一致します。

\w

アルファベット、数字またはアンダースコア文字。英語の文字セットでは、\w[a-zA-Z_0-9] と等価です。

'\w*' は、アルファベット、数字またはアンダースコアの任意の文字のまとまりで構成される単語を識別します。

\W

アルファベット、数字またはアンダースコア以外の任意の文字。英語の文字セットでは、\W[^a-zA-Z_0-9] と等価です。

'\W*' は、アルファベット、数字またはアンダースコア以外の任意の文字のまとまりで構成される単語を識別します。

\s

任意の空白文字。[ \f\n\r\t\v] と等価です。

'\w*n\s' は後ろに空白文字が続く、文字 n で終わる単語と一致します。

\S

任意の空白文字以外の文字。[^ \f\n\r\t\v] と等価です。

'\d\S' は後ろに空白文字以外の文字が続く数字と一致します。

\d

任意の数字。[0-9] と等価です。

'\d*' は任意の数の連続する数字と一致します。

\D

任意の数字以外の文字。[^0-9] と等価です。

'\w*\D\>' は数字で終わらない単語と一致します。

\oN または \o{N}

8 進数値 N の文字

'\o{40}' は 8 進数 40 で定義される空白文字と一致します。

\xN または \x{N}

16 進数値 N の文字

'\x2C' は 16 進数 2C で定義されるコンマ文字と一致します。

文字表現

演算子

説明

\a

アラーム (ビープ)

\b

バックスペース

\f

フォーム フィード

\n

改行

\r

キャリッジ リターン

\t

水平タブ

\v

垂直タブ

\char

文字どおり一致させる正規表現で特殊な意味をもつ任意の文字 (単一のバックスラッシュに一致させるには \\ を使用するなど)

量指定子

量指定子は、一致するテキスト内でパターンが発生しなければならない回数を指定します。

量指定子

表現の出現回数

expr*

0 回以上の繰り返し。

'\w*' は任意の長さの単語と一致します。

expr?

0 回または 1 回。

'\w*(\.m)?' はオプションで拡張子 .m で終了する単語と一致します。

expr+

1 回以上の繰り返し。

'<img src="\w+\.gif">' はファイル名に 1 文字以上の文字が含まれている場合、<img> HTML タグと一致します。

expr{m,n}

m 回以上 n 回以下の繰り返し。

{0,1}? と等価です。

'\S{4,8}' は 4 ~ 8 文字の空白文字以外の文字と一致します。

expr{m,}

m 回以上の繰り返し。

{0,} および {1,} は、* および + とそれぞれ等価です。

'<a href="\w{1,}\.html">' はファイル名に 1 文字以上の文字が含まれている場合、<a> HTML タグと一致します。

expr{n}

正確に n 回の繰り返し。

{n,n} と等価です。

'\d{4}' は 4 桁の数と一致します。

量指定子は次の表に示すように、3 つのモードで表示できます。q は前の表の任意の量指定子を表します。

モード

説明

exprq

最長一致表現。できるだけ多くの文字と一致します。

たとえば、テキスト '<tr><td><p>text</p></td>' の場合、式 '</?t.*>'<tr から /td> までのすべての文字と一致します。

'<tr><td><p>text</p></td>'

exprq?

最短一致表現。できるだけ少ない文字と一致します。

たとえば、テキスト '<tr><td><p>text</p></td>' の場合、式 '</?t.*?>' は最初に閉じ山かっこ (>) が出現した時点で、各一致が終了します。

'<tr>' '<td>' '</td>'

exprq+

独占的表現。できる限り多く一致しますが、テキスト部分の再スキャンは実行しません。

たとえば、テキスト '<tr><td><p>text</p></td>' の場合、式 '</?t.*+>' は一致を返しません。これは .* の使用により閉じ山かっこがキャプチャされ、再スキャンされないためです。

グループ化演算子

グループ化演算子を使用すると、トークンのキャプチャ、1 つの演算子の複数の要素への適用または特定グループ内のバックトラッキングを無効にできます。

グループ化演算子

説明

(expr)

式の要素をグループ化し、トークンをキャプチャします。

'Joh?n\s(\w*)' は、名が John または Jon である人の姓が含まれているトークンをキャプチャします。

(?:expr)

グループ化はしますが、トークンはキャプチャしません。

'(?:[aeiou][^aeiou]){2}''anon' のように、1 つの母音の後に 1 つの子音が続く、2 つの連続パターンと一致します。

グループ化を使用しない場合、'[aeiou][^aeiou]{2}' は 1 つの母音の後に 2 つの子音が続くパターンと一致します。

(?>expr)

アトミックにグループ化します。一致を検索するためにグループ内のバックトラッキングを実行せず、トークンをキャプチャしません。

'A(?>.*)Z''AtoZ' と一致しませんが、'A(?:.*)Z' は一致します。アトミック グループを使用すると、.* を使用することで Z がキャプチャされ、再スキャンは実行されません。

(expr1|expr2)

expr1 または式 expr2 に一致します。

expr1 と一致する場合、expr2 は無視されます。

左小かっこの後に ?: または ?> を入れると、トークンを抑制したりアトミックにグループ化したりできます。

'(let|tel)\w+' は、let または tel を含むがそれらで終わらない単語と一致します。

アンカー

式内のアンカーは、入力テキストまたは単語の最初または最後と一致します。

アンカー

一致対象

^expr

入力テキストの最初。

'^M\w*' はテキストの最初が M で始まる単語と一致します。

expr$

入力テキストの最後。

'\w*m$' はテキストの最後が m で終わる単語と一致します。

\<expr

単語の最初。

'\<n\w*'n で始まる任意の単語と一致します。

expr\>

単語の最後。

'\w*e\>'e で終わる任意の単語と一致します。

前後参照アサーション

前後参照アサーションは、目的の一致の直前または直後のパターン (一致の一部ではない) を検索します。

ポインターは現在の位置のままで、test 式に対応する文字はキャプチャも破棄もされません。このため、前方参照アサーションは、オーバーラップしている文字グループと一致することがあります。

前後参照アサーション

説明

expr(?=test)

test と一致する文字を前方参照します。

'\w*(?=ing)' は、入力テキスト 'Flying, not falling.''Fly''fall' など、後ろに ing が続く語句と一致します。

expr(?!test)

test と一致しない文字を前方参照します。

'i(?!ng)' は、後ろに ng が続かない文字 i のインスタンスと一致します。

(?<=test)expr

test と一致する文字を後方参照します。

'(?<=re)\w*' は、入力テキスト 'renew, reuse, recycle''new''use''cycle' など、're' の後に続く語句と一致します。

(?<!test)expr

test と一致しない文字を後方参照します。

'(?<!\d)(\d)(?!\d)' は 1 桁の数字 (前後に他の桁が続かない数字) と一致します。

式の "前に" 前方アサーションを指定する場合、演算は論理 AND と等価になります。

演算

説明

(?=test)expr

testexpr の両方に一致します。

'(?=[a-z])[^aeiou]' は子音と一致します。

(?!test)expr

expr には一致し、test には一致しません。

'(?![aeiou])[a-z]' は子音と一致します。

論理演算子と条件演算子

論理演算子と条件演算子を使用すると、特定の条件の状態をテストし、その結果を使用して次に一致するパターン (ある場合) を決定できます。これらの演算子は論理 OR および if または if/else 条件をサポートしています。

条件はトークンの場合もあれば、前方参照演算子または (?@cmd) という形式の動的表現の場合もあります。動的表現は、論理値または数値を返さなければなりません。

条件演算子

説明

expr1|expr2

expr1 または式 expr2 に一致します。

expr1 と一致する場合、expr2 は無視されます。

'(let|tel)\w+'let または tel で始まる単語と一致します。

(?(cond)expr)

条件 condtrue の場合、expr に一致します。

Windows® システムで実行する場合、'(?(?@ispc)[A-Z]:\\)'C:\ などのドライブ名と一致します。

(?(cond)expr1|expr2)

条件 condtrue の場合、expr1 に一致します。それ以外の場合は expr2 に一致します。

'Mr(s?)\..*?(?(1)her|his) \w*' は、テキストが Mrs で始まる場合は her を含むテキストに一致し、テキストが Mr で始まる場合は his を含むテキストに一致します。

トークン演算子

トークンは正規表現の一部をかっこで囲んで定義した、一致テキストの一部です。テキスト内のシーケンスによってトークンを参照することも (順序トークン)、コードの保守を簡単にしたり、出力を読み取りやすくしたりするために、トークンに名前を割り当てることもできます。

順序トークン演算子

説明

(expr)

かっこで囲まれた式と一致する文字をトークンでキャプチャします。

'Joh?n\s(\w*)' は、名が John または Jon である人の姓が含まれているトークンをキャプチャします。

\N

N 番目のトークンと一致します。

'<(\w+).*>.*</\1>' はテキスト '<title>Some text</title>''title' など、HTML タグのトークンをキャプチャします。

(?(N)expr1|expr2)

N 番目のトークンが見つかった場合は expr1 に一致します。それ以外の場合は expr2 に一致します。

'Mr(s?)\..*?(?(1)her|his) \w*' は、テキストが Mrs で始まる場合は her を含むテキストに一致し、テキストが Mr で始まる場合は his を含むテキストに一致します。

名前付きトークン演算子

説明

(?<name>expr)

かっこで囲まれた式と一致する文字を名前付きトークンでキャプチャします。

'(?<month>\d+)-(?<day>\d+)-(?<yr>\d+)' は、mm-dd-yy の形式の入力日付に含まれる月、日および年の名前付きトークンを作成します。

\k<name>

name で参照されるトークンに一致します。

'<(?<tag>\w+).*>.*</\k<tag>>' はテキスト '<title>Some text</title>''title' など、HTML タグのトークンをキャプチャします。

(?(name)expr1|expr2)

名前付きトークンが見つかった場合は expr1 に一致します。それ以外の場合は expr2 に一致します。

'Mr(?<sex>s?)\..*?(?(sex)her|his) \w*' は、テキストが Mrs で始まる場合は her を含むテキストに一致し、テキストが Mr で始まる場合は his を含むテキストに一致します。

メモ

式に入れ子にされたかっこがある場合、MATLAB® は一番外側のかっこのペアに対応するトークンをキャプチャします。たとえば '(and(y|rew))' という検索パターンの場合、MATLAB は 'andrew' に対するトークンを作成しますが、'y''rew' に対するトークンは作成しません。

動的正規表現

動的表現を使用すると、MATLAB コマンドまたは正規表現を実行して一致するテキストを特定できます。

動的表現を囲む小かっこでは、キャプチャするグループを "作成しません"。

演算子

説明

(??expr)

expr を解析して、一致表現内に結果の語句を含めます。

解析時、expr は完全かつ有効な正規表現に対応しなければなりません。バックスラッシュのエスケープ文字 (\) を使用する動的表現では、バックスラッシュを 2 つ使用しなければなりません。1 つは expr の初期解析に使用し、もう 1 つは完全な一致に使用します。

'^(\d+)((??\\w{$1}))' は一致の先頭の 1 桁を読み取ることによって、一致する文字数を決定します。動的表現は、結果の一致がトークンにキャプチャされるように、2 番目のかっこのセットによって囲まれています。たとえば、'5XXXXX' に一致すると、'5''XXXXX' のトークンがキャプチャされます。

(??@cmd)

cmd で表される MATLAB コマンドを実行し、返された出力を一致表現に含めます。

'(.{2,}).?(??@fliplr($1))''abba' など 4 文字以上の回文を検索します。

(?@cmd)

cmd で表される MATLAB コマンドを実行しますが、返された出力をすべて破棄します(正規表現の診断に有効)。

'\w*?(\w)(?@disp($1))\1\w*' は重複する文字 (pp など) を含む単語と一致し、中間結果を表示します。

動的表現内では、次の演算子を使用して置換テキストを定義します。

置換演算子

説明

$& または $0

入力テキストの現在の一致部分

$`

入力テキストの現在の一致の前にある部分

$'

入力テキストの現在の一致の後にある部分 ($'' を使用して $' を表現)

$N

N 番目のトークン

$<name>

名前付きトークン

${cmd}

MATLAB で cmd コマンドを実行したときに返される出力

コメント

文字

説明

(?#comment)

正規表現にコメントを挿入します。コメントのテキストは、入力の検索時に無視されます。

'(?# Initial digit)\<\d\w+' にはコメントが含まれ、数字で始まる単語に一致します。

検索フラグ

検索フラグを使用して、一致する式に対する動作を変更します。式内での検索フラグの使用に対する代替案は、option 入力引数を渡すことです。

フラグ

説明

(?-i)

大文字と小文字を区別します。regexpregexprep の既定です。

(?i)

大文字と小文字を区別しません。regexpi の既定です。

(?s)

パターン内のドット (.) を任意の文字と一致させます (既定)。

(?-s)

パターン内のドットを改行文字以外の任意の文字と一致させます。

(?-m)

テキストの始めと終わりで ^ メタ文字と $ メタ文字を一致させます (既定)。

(?m)

行の始めと終わりで ^$ メタ文字を一致させます。

(?-x)

検索時に空白文字とコメントを含めます (既定)。

(?x)

検索時に空白文字とコメントを無視します。空白文字と # 文字に一致させるには、'\ ''\#' を使用します。

フラグによって修正される式は、かっこの後に

(?i)\w*

のように表示されるか、かっこの中に表示でき、次のようにコロン (:) を使ってフラグから切り離すことができます。

(?i:\w*)

後の構文を使うと、より長い式の一部に対する動作を変更できます。

データ型: char | cell | string

置換テキスト。文字ベクトル、文字ベクトルの cell 配列または string 配列として次のように指定します。

  • replace が単一の文字ベクトル、expression が文字ベクトルの cell 配列の場合、regexprep は各表現に同じ置換テキストを使用します。

  • replaceN 個の文字ベクトルからなる cell 配列で expression が単一の文字ベクトルの場合、regexprepN 個の一致と置換を試みます。

  • replaceexpression が両方とも文字ベクトルの cell 配列の場合、同じ数の要素を含んでいなければなりません。regexprep は、expression の要素と replace の一致する要素をそれぞれ組み合わせます。

置換テキストには、次の表に示すように、正規文字、特殊文字 (タブ、改行など) または置換演算子を含めることができます。

置換演算子

説明

$& または $0

入力テキストの現在の一致部分

$`

入力テキストの現在の一致の前にある部分

$'

入力テキストの現在の一致の後にある部分 ($'' を使用して $' を表現)

$N

N 番目のトークン

$<name>

名前付きトークン

${cmd}

MATLAB で cmd コマンドを実行したときに返される出力

演算子

説明

\a

アラーム (ビープ)

\b

バックスペース

\f

フォーム フィード

\n

改行

\r

キャリッジ リターン

\t

水平タブ

\v

垂直タブ

\char

文字どおり一致させる正規表現で特殊な意味をもつ任意の文字 (単一のバックスラッシュに一致させるには \\ を使用するなど)

データ型: char | cell | string

検索または置換オプション。次の表に示すように、文字ベクトルまたは整数値として指定します。

オプションはペアになっています。既定の動作に対応するオプションが 1 つ、既定をオーバーライドできるオプションが 1 つまたは 2 つです。セットからオプションを 1 つだけ指定します。オプションの順番は任意です。

既定

オーバーライド

説明

'all'

'once'

式をできるだけ多く一致させて置き換える (既定) か、1 回しか一致させ置き換えないかを指定します。

N

N 番目に発生した一致だけを置き換えます。ここで N は整数値です。

'nowarnings'

'warnings'

警告の非表示 (既定) または表示を指定します。

'matchcase'

'ignorecase'

一致および置換時に大文字小文字を区別する (既定) か、無視するかを指定します。

'preservecase'

一致時に大文字小文字を無視しますが、以下のいずれかの構造に一致する場合は、置換時に元のテキストの対応する文字の大文字と小文字を維持します。

  1. 元のテキストがすべて小文字の場合、置換はすべて小文字になります。

  2. 元のテキストがすべて大文字の場合、置換はすべて大文字になります。

  3. 元のテキストに複数の単語が含まれていて、各単語の最初の文字が大文字の場合、置換も同じ形式になります。

  4. 元のテキストに複数の単語が含まれていて、最初の単語の最初の文字のみが大文字の場合、置換も同じ形式になります。

元のテキストが上記のいずれの構造にも一致しない場合、置換テキストはすべて小文字になります。

'noemptymatch'

'emptymatch'

長さがゼロの一致を無視する (既定) か、含めるかを指定します。

'dotall'

'dotexceptnewline'

ドットをなんらかの文字に一致させる (既定) か、改行 (\n) を除きすべてと一致させるかを指定します。

'stringanchors'

'lineanchors'

^ メタ文字と $ メタ文字を文字ベクトルの始めと終わりに適用する (既定) か、行の始めと終わりに適用するかを指定します。改行文字 (\n) は、行の末尾を指定します。行の先頭は最初の文字、または改行文字の直後の任意の文字として指定されます。

'literalspacing'

'freespacing'

検索時に空白文字とコメントを含める (既定) か無視するかを指定します。freespacing の使用時、空白文字と # 文字に一致させるには '\ ''\#' を使用します。

データ型: char | string

出力引数

すべて折りたたむ

更新されたテキスト。文字ベクトル、文字ベクトルの cell 配列または string 配列として返されます。newStr のデータ型は、str のデータ型と同じです。

拡張機能

バージョン履歴

R2006a より前に導入