regexp
正規表現 (大文字小文字を区別する) の一致
構文
説明
は、正規表現で指定した文字パターンと一致する startIndex = regexp(str,expression)str の各部分文字列の開始インデックスを返します。一致要素がない場合、startIndex は空配列になります。テキストのオーバーラップする部分と一致する部分文字列がある場合は、最初の一致のインデックスのみが返されます。
[ は、一致するすべての開始インデックスと終了インデックスを返します。startIndex,endIndex] = regexp(str,expression)
は、out = regexp(str,expression,outkey)outkey で指定された出力を返します。たとえば、outkey が 'match' の場合、regexp は開始インデックスではなく、式と一致する部分文字列を返します。
___ = 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 で始まります。CUT と CAT という単語は大文字のため、一致しません。
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 配列のため、capStartIndex と spaceStartIndex も 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 = 1×2 cell
{'regexp'} {'relax'}
正規表現 '\w*x\w*' は次の文字ベクトルを指定します。
任意の数の英数字またはアンダースコア文字で始まります (
\w*)。文字列は小文字
xを含んでいます。文字列は
\w*で指定されているように、xの後、文字なしを含む、任意の数の英数字またはアンダースコア文字で終了します。
文字ベクトルを複数の部分文字列に分割します。ここで各部分文字列は、^ 文字で区切られます。
str = ['Split ^this text into ^several pieces']; expression = '\^'; splitStr = regexp(str,expression,'split')
splitStr = 1×3 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 = 1×3 cell
{'She'} {'she'} {'sho'}
noMatch = 1×4 cell
{0×0 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 = 1×1 cell array
{'lowercase'}
正規表現は次の文字ベクトルを指定します。
任意の数の英数字またはアンダースコア文字で始まります (
\w*)。文字列はリテラル テキスト (
case) で終了します。
関数 regexpi は regexp と同じ構文を使用しますが、大文字小文字を区別しない一致を実行します。
matchWithRegexpi = regexpi(str,expression,'match')matchWithRegexpi = 1×2 cell
{'UPPERCASE'} {'lowercase'}
別の方法として、'ignorecase' オプションを使って、regexp の大文字小文字を区別する一致を無効にします。
matchWithIgnorecase = regexp(str,expression,'match','ignorecase')
matchWithIgnorecase = 1×2 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) を含む文字ベクトルを作成し、正規表現を使用して解析します。regexp は matchStr を複数行のテキストが格納された 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 = 1×2 cell
{'abc'} {' de'}
^ または $ のメタ文字と 'lineanchors' オプションを使って、各行の最初または最後の文字を見つけます。
expression = '.$'; lastInLine = regexp(str,expression,'match','lineanchors')
lastInLine = 1×2 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 = 1×1 cell array
{[5 17]}
開始インデックスに数値配列としてアクセスするには、セルのインデックスを指定します。
startIndex{1}ans = 1×2
5 17
一致および不一致の部分文字列を返します。各出力は個別のスカラー cell にあります。
[match,noMatch] = regexp(str,expression,'match','split','forceCellOutput')
match = 1×1 cell array
{1×2 cell}
noMatch = 1×1 cell array
{1×3 cell}
一致の配列にアクセスするには、match のインデックスを指定します。
match{1}ans = 1×2 cell
{'cat'} {'coat'}
一致しない部分文字列にアクセスするには、noMatch のインデックスを指定します。
noMatch{1}ans = 1×3 cell
{'bat '} {' can car '} {' court CUT ct CAT-scan'}
入力引数
入力テキスト。文字ベクトル、文字ベクトルの cell 配列または string 配列として指定します。cell 配列の各文字ベクトルまたは string 配列の各 string は、任意の長さで任意の文字を含めることができます。
str と expression が string 配列または cell 配列の場合、これらの次元は同じでなければなりません。
データ型: string | char | cell
正規表現。文字ベクトル、文字ベクトルの cell 配列または string 配列として指定します。各式には、文字、メタ文字、演算子、トークンおよび str と一致するパターンを指定するフラグを含めることができます。
次の表では、正規表現の要素を説明します。
メタ文字
メタ文字は、文字、文字範囲、桁および空白文字を表します。メタ文字を使用して文字の汎用パターンを構築します。
メタ文字 | 説明 | 例 |
|---|---|---|
| 空白を含む任意の単一文字 |
|
| 大かっこ内の任意の文字。次の文字は文字どおり扱われます。 |
|
| 大かっこ内を除く任意の文字。次の文字は文字どおり扱われます。 |
|
|
|
|
| アルファベット、数字またはアンダースコア文字。英語の文字セットでは、 |
|
| アルファベット、数字またはアンダースコア以外の任意の文字。英語の文字セットでは、 |
|
| 任意の空白文字。 |
|
| 任意の空白文字以外の文字。 |
|
| 任意の数字。 |
|
| 任意の数字以外の文字。 |
|
| 8 進数値 |
|
| 16 進数値 |
|
文字表現
演算子 | 説明 |
|---|---|
| アラーム (ビープ) |
| バックスペース |
| フォーム フィード |
| 改行 |
| キャリッジ リターン |
| 水平タブ |
| 垂直タブ |
| 文字どおり一致させる正規表現で特殊な意味をもつ任意の文字 (単一のバックスラッシュに一致させるには |
量指定子
量指定子は、一致するテキスト内でパターンが発生しなければならない回数を指定します。
量指定子 | 表現の出現回数 | 例 |
|---|---|---|
| 0 回以上の繰り返し。 |
|
| 0 回または 1 回。 |
|
| 1 回以上の繰り返し。 |
|
|
|
|
|
|
|
| 正確に
|
|
量指定子は次の表に示すように、3 つのモードで表示できます。q は前の表の任意の量指定子を表します。
モード | 説明 | 例 |
|---|---|---|
| 最長一致表現。できるだけ多くの文字と一致します。 | たとえば、テキスト |
| 最短一致表現。できるだけ少ない文字と一致します。 | たとえば、テキスト |
| 独占的表現。できる限り多く一致しますが、テキスト部分の再スキャンは実行しません。 | たとえば、テキスト |
グループ化演算子
グループ化演算子を使用すると、トークンのキャプチャ、1 つの演算子の複数の要素への適用または特定グループ内のバックトラッキングを無効にできます。
グループ化演算子 | 説明 | 例 |
|---|---|---|
| 式の要素をグループ化し、トークンをキャプチャします。 |
|
| グループ化はしますが、トークンはキャプチャしません。 |
グループ化を使用しない場合、 |
| アトミックにグループ化します。一致を検索するためにグループ内のバックトラッキングを実行せず、トークンをキャプチャしません。 |
|
| 式
左小かっこの後に |
|
アンカー
式内のアンカーは、入力テキストまたは単語の最初または最後と一致します。
アンカー | 一致対象 | 例 |
|---|---|---|
| 入力テキストの最初。 |
|
| 入力テキストの最後。 |
|
| 単語の最初。 |
|
| 単語の最後。 |
|
前後参照アサーション
前後参照アサーションは、目的の一致の直前または直後のパターン (一致の一部ではない) を検索します。
ポインターは現在の位置のままで、test 式に対応する文字はキャプチャも破棄もされません。このため、前方参照アサーションは、オーバーラップしている文字グループと一致することがあります。
前後参照アサーション | 説明 | 例 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
式の "前に" 前方アサーションを指定する場合、演算は論理 AND と等価になります。
演算 | 説明 | 例 |
|---|---|---|
|
|
|
|
|
|
論理演算子と条件演算子
論理演算子と条件演算子を使用すると、特定の条件の状態をテストし、その結果を使用して次に一致するパターン (ある場合) を決定できます。これらの演算子は論理 OR および if または if/else 条件をサポートしています。
条件はトークンの場合もあれば、前方参照演算子または (?@cmd) という形式の動的表現の場合もあります。動的表現は、論理値または数値を返さなければなりません。
条件演算子 | 説明 | 例 |
|---|---|---|
| 式
|
|
| 条件 | Windows® システムで実行する場合、 |
| 条件 |
|
トークン演算子
トークンは正規表現の一部をかっこで囲んで定義した、一致テキストの一部です。テキスト内のシーケンスによってトークンを参照することも (順序トークン)、コードの保守を簡単にしたり、出力を読み取りやすくしたりするために、トークンに名前を割り当てることもできます。
順序トークン演算子 | 説明 | 例 |
|---|---|---|
| かっこで囲まれた式と一致する文字をトークンでキャプチャします。 |
|
|
|
|
|
|
|
名前付きトークン演算子 | 説明 | 例 |
|---|---|---|
| かっこで囲まれた式と一致する文字を名前付きトークンでキャプチャします。 |
|
|
|
|
| 名前付きトークンが見つかった場合は |
|
メモ
式に入れ子にされたかっこがある場合、MATLAB® は一番外側のかっこのペアに対応するトークンをキャプチャします。たとえば '(and(y|rew))' という検索パターンの場合、MATLAB は 'andrew' に対するトークンを作成しますが、'y' や 'rew' に対するトークンは作成しません。
動的正規表現
動的表現を使用すると、MATLAB コマンドまたは正規表現を実行して一致するテキストを特定できます。
動的表現を囲む小かっこでは、キャプチャするグループを "作成しません"。
演算子 | 説明 | 例 |
|---|---|---|
|
解析時、 |
|
|
|
|
|
|
|
動的表現内では、次の演算子を使用して置換テキストを定義します。
置換演算子 | 説明 |
|---|---|
| 入力テキストの現在の一致部分 |
| 入力テキストの現在の一致の前にある部分 |
| 入力テキストの現在の一致の後にある部分 ( |
|
|
| 名前付きトークン |
| MATLAB で |
コメント
文字 | 説明 | 例 |
|---|---|---|
(?#comment) | 正規表現にコメントを挿入します。コメントのテキストは、入力の検索時に無視されます。 |
|
検索フラグ
検索フラグを使用して、一致する式に対する動作を変更します。式内での検索フラグの使用に対する代替案は、option 入力引数を渡すことです。
フラグ | 説明 |
|---|---|
(?-i) | 大文字と小文字を区別します。 |
(?i) | 大文字と小文字を区別しません。 |
(?s) | パターン内のドット ( |
(?-s) | パターン内のドットを改行文字以外の任意の文字と一致させます。 |
(?-m) | テキストの始めと終わりで |
(?m) | 行の始めと終わりで |
(?-x) | 検索時に空白文字とコメントを含めます (既定)。 |
(?x) | 検索時に空白文字とコメントを無視します。空白文字と |
フラグによって修正される式は、かっこの後に
(?i)\w*
のように表示されるか、かっこの中に表示でき、次のようにコロン (:) を使ってフラグから切り離すことができます。
(?i:\w*)
後の構文を使うと、より長い式の一部に対する動作を変更できます。
データ型: char | cell | string
どの出力を返すかを示すキーワード。次の文字ベクトルのいずれかとして指定します。
出力キーワード | 戻り値 |
|---|---|
| すべての一致の開始インデックス ( |
| すべての一致の終了インデックス ( |
| すべてのトークンの開始インデックスと終了インデックス |
|
|
|
|
| 各名前付きトークンの名前とテキスト |
|
|
データ型: char | string
検索オプション。文字ベクトルとして指定します。オプションはペアになっています。既定の動作に対応するオプションが 1 つ、既定をオーバーライドできるオプションが 1 つです。ペアからオプションを 1 つだけ指定します。オプションの順番は任意です。
| 既定 | オーバーライド | 説明 |
|---|---|---|
|
|
| 式をできるだけ多く一致させる (既定) か、1 回しか一致させないかを指定します。 |
|
|
| 警告の非表示 (既定) または表示を指定します。 |
|
|
| 大文字小文字を区別する (既定) か、無視するかを指定します。 |
|
|
| 長さがゼロの一致を無視する (既定) か、含めるかを指定します。 |
|
|
| ドットをなんらかの文字に一致させる (既定) か、改行 ( |
|
|
|
|
|
|
| 検索時に空白文字とコメントを含める (既定) か無視するかを指定します。 |
データ型: char | string
出力引数
各一致の開始インデックス。次のように行ベクトルまたは cell 配列として返されます。
strとexpressionが両方とも文字ベクトルまたは string スカラーの場合、出力は行ベクトルになります。一致がない場合は空の配列になります。strまたはexpressionの一方が文字ベクトルの cell 配列または string 配列で、他方が文字ベクトルまたは string スカラーの場合、出力は行ベクトルの cell 配列になります。出力 cell 配列の次元は、入力配列の次元と同じです。strとexpressionが両方とも cell 配列または string 配列の場合、これらの次元は同じでなければなりません。出力は同じ次元の cell 配列になります。
各一致の終了インデックス。次のように行ベクトルまたは cell 配列として返されます。
strとexpressionが両方とも文字ベクトルまたは string スカラーの場合、出力は行ベクトルになります。一致がない場合は空の配列になります。strまたはexpressionの一方が文字ベクトルの cell 配列または string 配列で、他方が文字ベクトルまたは string スカラーの場合、出力は行ベクトルの cell 配列になります。出力 cell 配列の次元は、入力配列の次元と同じです。strとexpressionが両方とも cell 配列または string 配列の場合、これらの次元は同じでなければなりません。出力は同じ次元の cell 配列になります。
一致に関する情報。数値、セル、string または構造体配列として返されます。出力の情報は、次のように outkey に対して指定した値によって決まります。
出力キーワード | 出力の説明 | 出力のタイプと次元 |
|---|---|---|
| 一致の開始インデックス |
|
| 一致の終了インデックス | |
| すべてのトークンの開始インデックスと終了インデックス | 既定ですべての一致が返される場合:
1 つの一致しか返さない 特定のインデックス |
|
| 既定ですべての一致が返される場合:
|
|
| 既定ですべての一致が返される場合:
一致を 1 つのみ返す 特定のインデックスで予測されるトークンが見つからない場合、MATLAB はそのトークンに対して空の値、文字ベクトルに対して |
| 各名前付きトークンの名前とテキスト | すべての一致に対して:
|
|
| すべての一致に対して:
|
詳細
トークンは、正規表現に部分的に対応する一致テキストの一部です。トークンを作成するには、正規表現の部分をかっこで囲みます。
たとえば、次の表現は日、月、年のトークンを含め、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'
詳細については、正規表現におけるトークンを参照してください。
アルゴリズム
MATLAB は左から右に各入力文字ベクトルまたは string を解析し、文字ベクトル内または string 内のテキストを、正規表現の最初の要素と一致させようとします。このプロセスの実行中、MATLAB は一致しないすべてのテキストをスキップします。
MATLAB が最初の一致を検出すると、表現の 2 番目の要素との一致がないか解析が継続され、以下同様に処理が行われます。
拡張機能
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)