Main Content

regexp

正規表現 (大文字小文字を区別する) の一致

説明

startIndex = regexp(str,expression) は、正規表現で指定した文字パターンと一致する str の各部分文字列の開始インデックスを返します。一致要素がない場合、startIndex は空配列になります。テキストのオーバーラップする部分と一致する部分文字列がある場合は、最初の一致のインデックスのみが返されます。

[startIndex,endIndex] = regexp(str,expression) は、一致するすべての開始インデックスと終了インデックスを返します。

out = regexp(str,expression,outkey) は、outkey で指定された出力を返します。たとえば、outkey'match' の場合、regexp は開始インデックスではなく、式と一致する部分文字列を返します。

[out1,...,outN] = regexp(str,expression,outkey1,...,outkeyN) は、複数の出力キーワードで指定された出力を、指定された順番に返します。たとえば、'match','tokens' を指定した場合、regexp は式全体と一致する部分文字列と、式の一部と一致するトークンを返します。

___ = regexp(___,option1,...,optionM) は、指定されたオプション フラグを使って検索を修正します。たとえば、'ignorecase' を指定すると、大文字小文字を区別しない検索が実行されます。任意の入力を含めたり、前述の構文から任意の出力を要求することができます。

___ = regexp(___,'forceCellOutput') は、各出力引数をスカラー cell として返します。セルには前述の構文の出力として表される数値配列または部分文字列が含まれます。任意の入力を含めたり、前述の構文から任意の出力を要求することができます。

すべて折りたたむ

c で始まり、t で終わり、その間に少なくとも 1 文字以上の母音を含む単語を検索します。

str = 'bat cat can car coat court CUT ct CAT-scan';
expression = 'c[aeiou]+t';
startIndex = regexp(str,expression)
startIndex = 1×2

     5    17

正規表現 'c[aeiou]+t' は次のパターンを指定します。

  • c が最初の文字でなければなりません。

  • c の後には、大かっこ内のいずれかの文字 ([aeiou]) が続かなければなりません。

  • 大かっこ付きのパターンは、+ 演算子の指定により、1 回以上発生しなければなりません。

  • t が最後の文字でなければならず、大かっこで囲まれたパターンと t の間に文字が存在してはなりません。

startIndex の値は、正規表現と一致する各単語の最初の文字のインデックスを示しています。一致する単語 cat はインデックス 5 で始まり、coat はインデックス 17 で始まります。CUTCAT という単語は大文字のため、一致しません。

cell 配列内の文字ベクトルに含まれる大文字とスペースの位置を検索します。

str = {'Madrid, Spain','Romeo and Juliet','MATLAB is great'};
capExpr = '[A-Z]';
spaceExpr = '\s';

capStartIndex = regexp(str,capExpr);
spaceStartIndex = regexp(str,spaceExpr);

入力 str が cell 配列のため、capStartIndexspaceStartIndex も cell 配列です。

大文字のインデックスを表示します。

celldisp(capStartIndex)
 
capStartIndex{1} =
 
     1     9

 
 
capStartIndex{2} =
 
     1    11

 
 
capStartIndex{3} =
 
     1     2     3     4     5     6

 

スペースのインデックスを表示します。

celldisp(spaceStartIndex)
 
spaceStartIndex{1} =
 
     8

 
 
spaceStartIndex{2} =
 
     6    10

 
 
spaceStartIndex{3} =
 
     7    10

 

文字 x を含む文字ベクトル内の単語をキャプチャします。

str = 'EXTRA! The regexp function helps you relax.';
expression = '\w*x\w*';
matchStr = regexp(str,expression,'match')
matchStr = 1x2 cell
    {'regexp'}    {'relax'}

正規表現 '\w*x\w*' は次の文字ベクトルを指定します。

  • 任意の数の英数字またはアンダースコア文字で始まります (\w*)。

  • 文字列は小文字 x を含んでいます。

  • 文字列は \w* で指定されているように、x の後、文字なしを含む、任意の数の英数字またはアンダースコア文字で終了します。

文字ベクトルを複数の部分文字列に分割します。ここで各部分文字列は、^ 文字で区切られます。

str = ['Split ^this text into ^several pieces'];
expression = '\^';
splitStr = regexp(str,expression,'split')
splitStr = 1x3 cell
    {'Split '}    {'this text into '}    {'several pieces'}

正規表現ではキャレット記号に特別な意味があるため、キャレット記号の前にエスケープ文字であるバックスラッシュ (\) を追加します。セミコロンなど別の区切り記号で文字ベクトルを分割する場合、バックスラッシュを含める必要はありません。

'match' キーワードを使用して正規表現と一致する文字ベクトルの部分をキャプチャし、'split' キーワードを使用して一致しない残りの部分をキャプチャします。

str = 'She sells sea shells by the seashore.';
expression = '[Ss]h.';
[match,noMatch] = regexp(str,expression,'match','split')
match = 1x3 cell
    {'She'}    {'she'}    {'sho'}

noMatch = 1x4 cell
    {0x0 char}    {' sells sea '}    {'lls by the sea'}    {'re.'}

正規表現 '[Ss]h.' は次のことを指定します。

  • S または s は最初の文字

  • h は 2 番目の文字

  • 3 番目の文字はドット (.) で指定されているように、スペースなど任意の文字と一致させることができる

文字ベクトルの最初 (または最後) の文字が正規表現と一致する場合、'split' キーワードからの最初 (または最後) の戻り値は空の文字ベクトルになります。

オプションで、部分文字列から元の文字ベクトルを再構築します。

combinedStr = strjoin(noMatch,match)
combinedStr = 
'She sells sea shells by the seashore.'

正規表現内でトークンを定義して、HTML タグの名前を検索します。トークンはかっこ () で示されます。

str = '<title>My Title</title><p>Here is some text.</p>';
expression = '<(\w+).*>.*</\1>';
[tokens,matches] = regexp(str,expression,'tokens','match');

正規表現 <(\w+).*>.*</\1> は次のパターンを指定します。

  • <(\w+) は、開始山かっことその後に続く 1 つ以上の英数字またはアンダースコア文字を検索します。かっこで \w+ を囲むと、トークン内の HTML タグの名前がキャプチャされます。

  • .*> は HTML 属性など、任意の数の追加文字と、閉じ山かっこを検索します。

  • </\1> は最初のトークン (\1 で指定) に対応する終了タグを検索します。終了タグの形式は </tagname> です。

トークンと一致する部分文字列を表示します。

celldisp(tokens)
 
tokens{1}{1} =
 
title
 
 
tokens{2}{1} =
 
p
 
celldisp(matches)
 
matches{1} =
 
<title>My Title</title>
 
 
matches{2} =
 
<p>Here is some text.</p>
 

次の形式で日付または月のどちらかを最初に表示できる日付を解析します。mm/dd/yyyy または dd-mm-yyyy。名前付きトークンを使って、日付の各部を特定します。

str = '01/11/2000  20-02-2020  03/30/2000  16-04-2020';
expression = ['(?<month>\d+)/(?<day>\d+)/(?<year>\d+)|'...
              '(?<day>\d+)-(?<month>\d+)-(?<year>\d+)'];
tokenNames = regexp(str,expression,'names');

正規表現は次のパターンを指定します。

  • (?<name>\d+) は 1 つ以上の数値を検索し、その結果を名前で指定されたトークンに割り当てます。

  • | は論理 or 演算子です。これは日付に使用できるパターンが 2 つあることを意味します。最初のパターンでは、スラッシュ (/) によりトークンが分割されます。2 番目のパターンでは、ハイフン (-) によりトークンが分割されます。

名前付きトークンを表示します。

for k = 1:length(tokenNames)
   disp(tokenNames(k))
end
    month: '01'
      day: '11'
     year: '2000'

    month: '02'
      day: '20'
     year: '2020'

    month: '03'
      day: '30'
     year: '2000'

    month: '04'
      day: '16'
     year: '2020'

単語の大文字と小文字の両方のインスタンスを見つけます。

既定では、regexp は大文字小文字を区別する一致を実行します。

str = 'A character vector with UPPERCASE and lowercase text.';
expression = '\w*case';
matchStr = regexp(str,expression,'match')
matchStr = 1x1 cell array
    {'lowercase'}

正規表現は次の文字ベクトルを指定します。

  • 任意の数の英数字またはアンダースコア文字で始まります (\w*)。

  • 文字列はリテラル テキスト (case) で終了します。

関数 regexpiregexp と同じ構文を使用しますが、大文字小文字を区別しない一致を実行します。

matchWithRegexpi = regexpi(str,expression,'match')
matchWithRegexpi = 1x2 cell
    {'UPPERCASE'}    {'lowercase'}

別の方法として、'ignorecase' オプションを使って、regexp の大文字小文字を区別する一致を無効にします。

matchWithIgnorecase = regexp(str,expression,'match','ignorecase')
matchWithIgnorecase = 1x2 cell
    {'UPPERCASE'}    {'lowercase'}

複数の表現の場合は、(?i) 検索フラグを使って、選択した表現の大文字小文字を区別する一致を無効にします。

expression = {'(?-i)\w*case';...
              '(?i)\w*case'};
matchStr = regexp(str,expression,'match');
celldisp(matchStr)
 
matchStr{1}{1} =
 
lowercase
 
 
matchStr{2}{1} =
 
UPPERCASE
 
 
matchStr{2}{2} =
 
lowercase
 

改行 (\n) を含む文字ベクトルを作成し、正規表現を使用して解析します。regexpmatchStr を複数行のテキストが格納された cell 配列として返すため、テキストをこの cell 配列から抽出してすべての行を表示することができます。

str = sprintf('abc\n de');
expression = '.*';
matchStr = regexp(str,expression,'match');
matchStr{:}
ans = 
    'abc
      de'

既定では、ドット (.) は改行を含むすべての文字と一致し、元の文字ベクトルと等価の単一の一致を返します。

'dotexceptnewline' オプションを使って、一致から改行文字を除外します。これにより、テキストの行ごとに個別の一致が返ります。

matchStrNoNewline = regexp(str,expression,'match','dotexceptnewline')
matchStrNoNewline = 1x2 cell
    {'abc'}    {' de'}

^ または $ のメタ文字と 'lineanchors' オプションを使って、各行の最初または最後の文字を見つけます。

expression = '.$';
lastInLine = regexp(str,expression,'match','lineanchors')
lastInLine = 1x2 cell
    {'c'}    {'e'}

テキスト内で一致を検索し、出力をスカラー cell に返します。

c で始まり、t で終わり、その間に 1 文字以上の母音を含む単語を検索します。開始インデックスをスカラー cell に返します。

str = 'bat cat can car coat court CUT ct CAT-scan';
expression = 'c[aeiou]+t';
startIndex = regexp(str,expression,'forceCellOutput')
startIndex = 1x1 cell array
    {[5 17]}

開始インデックスに数値配列としてアクセスするには、セルのインデックスを指定します。

startIndex{1}
ans = 1×2

     5    17

一致および不一致の部分文字列を返します。各出力は個別のスカラー cell にあります。

[match,noMatch] = regexp(str,expression,'match','split','forceCellOutput')
match = 1x1 cell array
    {1x2 cell}

noMatch = 1x1 cell array
    {1x3 cell}

一致の配列にアクセスするには、match のインデックスを指定します。

match{1}
ans = 1x2 cell
    {'cat'}    {'coat'}

一致しない部分文字列にアクセスするには、noMatch のインデックスを指定します。

noMatch{1}
ans = 1x3 cell
    {'bat '}    {' can car '}    {' court CUT ct CAT-scan'}

入力引数

すべて折りたたむ

入力テキスト。文字ベクトル、文字ベクトルの cell 配列または string 配列として指定します。cell 配列の各文字ベクトルまたは string 配列の各 string は、任意の長さで任意の文字を含めることができます。

strexpression が string 配列または cell 配列の場合、これらの次元は同じでなければなりません。

データ型: string | char | cell

正規表現。文字ベクトル、文字ベクトルの 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

どの出力を返すかを示すキーワード。次の文字ベクトルのいずれかとして指定します。

出力キーワード

戻り値

'start' (既定)

すべての一致の開始インデックス (startIndex)

'end'

すべての一致の終了インデックス (endIndex)

'tokenExtents'

すべてのトークンの開始インデックスと終了インデックス

'match'

expression のパターンと一致する各部分文字列のテキスト

'tokens'

str 内のキャプチャされた各トークンのテキスト

'names'

各名前付きトークンの名前とテキスト

'split'

str 内の一致しない部分文字列のテキスト

データ型: char | string

検索オプション。文字ベクトルとして指定します。オプションはペアになっています。既定の動作に対応するオプションが 1 つ、既定をオーバーライドできるオプションが 1 つです。ペアからオプションを 1 つだけ指定します。オプションの順番は任意です。

既定

オーバーライド

説明

'all'

'once'

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

'nowarnings'

'warnings'

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

'matchcase'

'ignorecase'

大文字小文字を区別する (既定) か、無視するかを指定します。

'noemptymatch'

'emptymatch'

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

'dotall'

'dotexceptnewline'

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

'stringanchors'

'lineanchors'

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

'literalspacing'

'freespacing'

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

データ型: char | string

出力引数

すべて折りたたむ

各一致の開始インデックス。次のように行ベクトルまたは cell 配列として返されます。

  • strexpression が両方とも文字ベクトルまたは string スカラーの場合、出力は行ベクトルになります。一致がない場合は空の配列になります。

  • str または expression の一方が文字ベクトルの cell 配列または string 配列で、他方が文字ベクトルまたは string スカラーの場合、出力は行ベクトルの cell 配列になります。出力 cell 配列の次元は、入力配列の次元と同じです。

  • strexpression が両方とも cell 配列または string 配列の場合、これらの次元は同じでなければなりません。出力は同じ次元の cell 配列になります。

各一致の終了インデックス。次のように行ベクトルまたは cell 配列として返されます。

  • strexpression が両方とも文字ベクトルまたは string スカラーの場合、出力は行ベクトルになります。一致がない場合は空の配列になります。

  • str または expression の一方が文字ベクトルの cell 配列または string 配列で、他方が文字ベクトルまたは string スカラーの場合、出力は行ベクトルの cell 配列になります。出力 cell 配列の次元は、入力配列の次元と同じです。

  • strexpression が両方とも cell 配列または string 配列の場合、これらの次元は同じでなければなりません。出力は同じ次元の cell 配列になります。

一致に関する情報。数値、セル、string または構造体配列として返されます。出力の情報は、次のように outkey に対して指定した値によって決まります。

出力キーワード

出力の説明

出力のタイプと次元

'start'

一致の開始インデックス

'start''end' の両方:

  • strexpression が両方とも文字ベクトルまたは string スカラーの場合、出力は行ベクトルになります。一致がない場合は空の配列になります。

  • str または expression の一方が文字ベクトルの cell 配列または string 配列で、他方が文字ベクトルまたは string スカラーの場合、出力は行ベクトルの cell 配列になります。出力 cell 配列の次元は、入力配列の次元と同じです。

  • strexpression が両方とも cell 配列または string 配列の場合、これらの次元は同じでなければなりません。出力は同じ次元の cell 配列になります。

'end'

一致の終了インデックス

'tokenExtents'

すべてのトークンの開始インデックスと終了インデックス

既定ですべての一致が返される場合:

  • strexpression が両方とも文字ベクトルまたは string スカラーの場合、出力は 1 行 n 列の cell 配列になります。ここで n は一致の数です。各セルには、m 行 2 列のインデックスの数値配列が含まれています。ここで m は一致内のトークンの数です。

  • str または expression のどちらかが文字ベクトルの cell 配列または string 配列の場合、出力は入力配列と同じ次元の cell 配列になります。各セルには 1 行 n 列の cell 配列が含まれています。ここで内側の各セルには m 行 2 列の数値配列が含まれています。

  • strexpression が両方とも cell 配列または string 配列の場合、これらの次元は同じでなければなりません。出力は同じ次元の cell 配列になります。

1 つの一致しか返さない 'once' オプションを指定した場合、出力は m 行 2 列の数値配列か、str または expression のどちらか一方または両方と同じ次元の cell 配列のいずれかになります。

特定のインデックス N のトークンが予想されるにもかかわらず、トークンが見つからない場合は、MATLAB はそのトークンの範囲 [N,N-1] を返します。

'match'

expression のパターンと一致する各部分文字列のテキスト

既定ですべての一致が返される場合:

  • strexpression が両方とも文字ベクトルまたは string スカラーの場合、出力は 1 行 n 列の配列になります。ここで n は一致の数です。

    str が文字ベクトルの場合、出力は文字ベクトルの cell 配列になります。str が string スカラーの場合、出力は string 配列になります。

  • str または expression の一方が文字ベクトルの cell 配列または string 配列で、他方が文字ベクトルまたは string スカラーの場合、出力は配列である引数と同じ次元をもつ cell 配列になります。

    str が文字ベクトルまたは文字ベクトルの cell 配列の場合、出力は文字ベクトルの cell 配列になります。str が string 配列の場合、出力は各セルに string 配列が含まれる cell 配列になります。

  • strexpression が両方とも cell 配列または string 配列の場合、これらの次元は同じでなければなりません。出力は同じ次元の cell 配列になります。

    str が文字ベクトルからなる cell 配列の場合、出力も同様です。str が string 配列の場合、出力は各セルに string 配列が含まれる cell 配列になります。

'once' オプションを指定して 1 つの一致のみを返す場合、出力は文字ベクトル、string 配列または str および expression と同じ次元の cell 配列になります。

'tokens'

str 内のキャプチャされた各トークンのテキスト

既定ですべての一致が返される場合:

  • strexpression が両方とも文字ベクトルまたは string スカラーの場合、出力は 1 行 n 列の cell 配列になります。ここで n は一致の数です。各セルには、1 行 m 列の一致の cell 配列が含まれます。ここで m は一致内のトークンの数です。

    str が文字ベクトルの場合、出力は文字ベクトルの cell 配列になります。str が string 配列の場合、出力は各セルに string 配列が含まれる cell 配列になります。

  • str または expression の一方が文字ベクトルの cell 配列または string 配列で、他方が文字ベクトルまたは string スカラーの場合、出力は配列である引数と同じ次元をもつ cell 配列になります。各セルには 1 行 n 列の cell 配列が含まれます。ここで内側の各セルには 1 行 m 列の配列が含まれます。

    str が文字ベクトルまたは文字ベクトルの cell 配列の場合、内側の各セルには 1 行 m 列の cell 配列が含まれます。str が string 配列の場合、内側の各セルには 1 行 m 列の string 配列が含まれます。

  • strexpression が両方とも cell 配列または string 配列の場合、これらの次元は同じでなければなりません。出力は同じ次元の cell 配列になります。

    str が文字ベクトルからなる cell 配列の場合、出力も同様です。str が string 配列の場合、出力は cell 配列となり、最も内部のセルには string 配列が含まれます。

一致を 1 つのみ返す 'once' オプションを指定した場合、出力は 1 行 m 列の string 配列、文字ベクトルの cell 配列、あるいは strexpression の一方または両方と同じ次元の cell 配列になります。

特定のインデックスで予測されるトークンが見つからない場合、MATLAB はそのトークンに対して空の値、文字ベクトルに対して ''、または文字列に対して "" を返します。

'names'

各名前付きトークンの名前とテキスト

すべての一致に対して:

  • strexpression が両方とも文字ベクトルまたは string スカラーの場合、出力は 1 行 n 列の構造体配列になります。ここで n は一致の数です。構造体のフィールド名は、トークン名に対応しています。

  • str または expression が文字ベクトルの cell 配列または string 配列で、他方が文字ベクトルまたは string スカラーの場合、出力は配列である引数と同じ次元をもつ cell 配列になります。各セルは、1 行 n 列の構造体配列を含んでいます。

  • strexpression が両方とも cell 配列または string 配列の場合、これらの次元は同じでなければなりません。出力は同じ次元の cell 配列になります。

'split'

str 内の一致しない部分文字列のテキスト

すべての一致に対して:

  • strexpression が両方とも文字ベクトルまたは string スカラーの場合、出力は 1 行 n 列の配列になります。ここで n は不一致の数です。

    str が文字ベクトルの場合、出力は文字ベクトルの cell 配列になります。str が string スカラーの場合、出力は string 配列になります。

  • str または expression の一方が文字ベクトルの cell 配列または string 配列で、他方が文字ベクトルまたは string スカラーの場合、出力は入力配列と同じ次元をもつ cell 配列になります。各セルには、1 行 n 列の文字ベクトルの cell 配列が含まれます。

    str が文字ベクトルまたは文字ベクトルの cell 配列の場合、出力は文字ベクトルの cell 配列になります。str が string 配列の場合、出力は各セルに string 配列が含まれる cell 配列になります。

  • strexpression が両方とも cell 配列の場合、両者とも同じ次元をもたなければなりません。出力は同じ次元の cell 配列になります。

    str が文字ベクトルからなる cell 配列の場合、出力も同様です。str が string 配列の場合、出力は各セルに string 配列が含まれる cell 配列になります。

詳細

すべて折りたたむ

トークン

トークンは、正規表現に部分的に対応する一致テキストの一部です。トークンを作成するには、正規表現の部分をかっこで囲みます。

たとえば、次の表現は日、月、年のトークンを含め、dd-mmm-yyyy という形式の日付を検出します。

str = 'Here is a date: 01-Apr-2020';
expression = '(\d+)-(\w+)-(\d+)';

mydate = regexp(str,expression,'tokens');
mydate{:}
ans =

  1×3 cell array

    {'01'}    {'Apr'}    {'2020'}

簡単に識別できるように、トークンに名前を関連付けることができます。

str = 'Here is a date: 01-Apr-2020';
expression = '(?<day>\d+)-(?<month>\w+)-(?<year>\d+)';

mydate = regexp(str,expression,'names')
mydate = 

  struct with fields:

      day: '01'
    month: 'Apr'
     year: '2020'

詳細については、正規表現におけるトークンを参照してください。

ヒント

  • テキスト内から完全に一致する文字を検索するには、contains または strfind を使用します。文字のパターンを見つけるには、regexp を使用します。

アルゴリズム

MATLAB は左から右に各入力文字ベクトルまたは string を解析し、文字ベクトル内または string 内のテキストを、正規表現の最初の要素と一致させようとします。このプロセスの実行中、MATLAB は一致しないすべてのテキストをスキップします。

MATLAB が最初の一致を検出すると、表現の 2 番目の要素との一致がないか解析が継続され、以下同様に処理が行われます。

拡張機能

バージョン履歴

R2006a より前に導入