ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

regexp

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

構文

  • startIndex = regexp(str,expression)
  • [startIndex,endIndex] = regexp(str,expression)
  • out = regexp(str,expression,outkey)
  • [out1,...,outN] = regexp(str,expression,outkey1,...,outkeyN)
  • ___= regexp(___,option1,...,optionM)

説明

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' を指定すると、大文字小文字を区別しない検索が実行されます。任意の入力を含めたり、前の構文から任意の出力を要求することができます。

すべて展開する

単一文字列でパターンを検索

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

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

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

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

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

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

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

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

複数の文字列でパターンを検索

セル配列内の文字列の大文字とスペースの位置を見つけます。

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

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

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

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

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

'match' キーワードを使用して部分文字列を返す

文字列 x を含む文字列内の単語をキャプチャします。

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

正規表現 '\w*x\w*' は、次の文字列を指定します。

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

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

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

'split' キーワードを使った区切り記号での文字列の分割

文字列を複数の部分文字列に分割します。ここで各部分文字列は、^ 文字によって区切られます。

str = ['Split ^this string into ^several pieces'];
expression = '\^';
splitStr = regexp(str,expression,'split')
splitStr = 
    'Split '    'this string into '    'several pieces'

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

一致する部分文字列と一致しない部分文字列を両方とも返す

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

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

noMatch = 
    ''    ' 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 つまたは複数の数値を検索し、その結果を name で指定されたトークンに割り当てます。

  • | は論理 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 string with UPPERCASE and lowercase text.';
expression = '\w*case';
matchStr = regexp(str,expression,'match')
matchStr = 
    'lowercase'

正規表現によって、次のことが指定されます。

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

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

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

matchWithRegexpi = regexpi(str,expression,'match')
matchWithRegexpi = 
    'UPPERCASE'    'lowercase'

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

matchWithIgnorecase = regexp(str,expression,'match','ignorecase')
matchWithIgnorecase = 
    '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) を含む文字列を作成し、正規表現を使って文字列を解析します。

str = sprintf('abc\n de');
expression = '.*';
matchStr = regexp(str,expression,'match')
matchStr = 
   [1x7 char]

既定では、ドット (.) は改行を含めすべての文字と一致し、元の文字列と同等の単一の一致を返します。

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

matchStrNoNewline = regexp(str,expression,'match','dotexceptnewline')
matchStrNoNewline = 
    'abc'    ' de'

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

expression = '.$';
lastInLine = regexp(str,expression,'match','lineanchors')
lastInLine = 
    'c'    'e'

入力引数

すべて展開する

str - 入力テキスト文字列 | 文字列のセル配列

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

strexpression が両方ともセル配列の場合、両者とも同じ次元をもたなければなりません。

データ型:char | cell

expression - 正規表現文字列 | 文字列のセル配列

正規表現。文字列または文字列のセル配列として指定します。各式には、文字、メタ文字、演算子、トークンおよび 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}' は 1 つの母音の後に 1 つの子音が続く、2 つの連続パターンと一致します。'anon' などがあります。

グループ化を使用しない場合、'[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 に一致します。

'(?(?@ispc)[A-Z]:\\)' は、Windows® システムで実行する場合、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}))' は、文字列の先頭桁を読み取ることによって、一致する文字数を決定します。動的表現は、生成される一致がトークンにキャプチャされるように、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

outkey - どの出力を返すかを示すキーワード'start' | 'end' | 'tokenExtents' | 'match' | 'tokens' | 'names' | 'split'

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

出力キーワード

戻り値

'start'

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

'end'

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

'tokenExtents'

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

'match'

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

'tokens'

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

'names'

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

'split'

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

データ型:char

option - 検索オプション'once' | 'warnings' | 'ignorecase' | 'emptymatch' | 'dotexceptnewline' | 'lineanchors' | ...

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

既定

オーバーライド

説明

'all'

'once'

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

'nowarnings'

'warnings'

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

'matchcase'

'ignorecase'

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

'noemptymatch'

'emptymatch'

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

'dotall'

'dotexceptnewline'

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

'stringanchors'

'lineanchors'

^$ メタ文字を文字列の始めと終わりに適用する (既定) か、行の始めと終わりに適用するかを指定します。

'literalspacing'

'freespacing'

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

データ型:char

出力引数

すべて展開する

startIndex - 各一致の開始インデックス行ベクトル | 行ベクトルのセル配列

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

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

  • str または expression が文字列のセル配列の場合、出力は行ベクトルのセル配列になります。出力セル配列の次元は、入力セル配列の次元と同じです。

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

endIndex - 各一致の終了インデックス行ベクトル | 行ベクトルのセル配列

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

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

  • str または expression が文字列のセル配列の場合、出力は行ベクトルのセル配列になります。出力セル配列の次元は、入力セル配列の次元と同じです。

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

out - 一致に関する情報数値配列 | セル配列 | 構造体配列

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

出力キーワード

出力の説明

出力のタイプと次元

'start'

一致の開始インデックス

'start''end' の両方:

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

  • str または expression が文字列のセル配列の場合、出力は行ベクトルのセル配列になります。出力セル配列の次元は、入力セル配列の次元と同じです。

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

'end'

一致の終了インデックス

'tokenExtents'

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

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

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

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

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

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

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

'match'

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

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

  • strexpression が両方とも文字列の場合、出力は 1 行 n 列の文字列のセル配列になります。ここで n は一致の数です。

  • str または expression が文字列のセル配列の場合、出力は入力セル配列と同じ次元のセル配列になります。各セルは、1 行 n 列の構造体配列を含んでいます。

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

1 つの一致しか返さない 'once' オプションを指定した場合、出力は文字列か、str および expression と同じ次元の文字列のセル配列のいずれかになります。

'tokens'

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

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

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

  • str または expression が文字列のセル配列の場合、出力は入力セル配列と同じ次元のセル配列になります。各セルには 1 行 n 列のセル配列が含まれています。ここで内側の各セルには 1 行 m 列の文字列のセル配列が含まれています。

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

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

特定のインデックスのトークンが予想されるにもかかわらず、トークンが見つからない場合は、MATLAB はトークンに対して空の文字列 ('') を返します。

'names'

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

すべての一致に対して:

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

  • str または expression が文字列のセル配列の場合、出力は入力セル配列と同じ次元のセル配列になります。各セルは、1 行 n 列の構造体配列を含んでいます。

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

'split'

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

すべての一致に対して:

  • strexpression が両方とも文字列の場合、出力は 1 行 n 列の文字列のセル配列になります。ここで n は一致しない文字列の数です。

  • str または expression が文字列のセル配列の場合、出力は入力セル配列と同じ次元のセル配列になります。各セルは、1 行 n 列の文字列のセル配列を含んでいます。

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

詳細

すべて展開する

トークン

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

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

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

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

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

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

mydate = regexp(str,expression,'names')
mydate = 
      day: '01'
    month: 'Apr'
     year: '2020'

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

ヒント

  • 文字列内から完全に一致する文字を見つけるには、strfind を使用します。文字のパターンを見つけるには、regexp を使用します。

アルゴリズム

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

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

参考

| | | | | |

この情報は役に立ちましたか?