Main Content

regexpPattern

指定した正規表現に一致するパターン

R2020b 以降

説明

pat = regexpPattern(expression) は、正規表現に一致するパターンを作成します。

pat = regexpPattern(expression,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。たとえば、'IgnoreCase'true に指定すると、一致時に大文字と小文字の区別を無視できます。

すべて折りたたむ

regexpPattern を使用して、テキスト検索関数の入力として使用できる正規表現を使用したパターンを指定します。

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

txt = "bat cat can car coat court CUT ct CAT-scan";
expression = 'c[aeiou]+t';

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

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

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

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

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

パターンを抽出します。CUTCAT という単語は大文字のため、一致しないことに注意してください。

pat = regexpPattern(expression);
extract(txt,pat)
ans = 2x1 string
    "cat"
    "coat"

regexpPattern を使用して作成したパターンを他のパターン関数と組み合わせて、より複雑なパターンを作成できます。whitespacePatternlettersPattern を使用して、正規表現一致箇所の後に続く単語にも一致する新しいパターンを作成し、新しいパターンを抽出します。

pat = regexpPattern(expression) + whitespacePattern + lettersPattern;
extract(txt,pat)
ans = 2x1 string
    "cat can"
    "coat court"

newline 文字を含む string を作成します。正規表現 '.' を使用して、newline 文字以外の任意の文字に一致させます。

txt = "First Line" + newline + "Second Line"
txt = 
    "First Line
     Second Line"

expression = '.+';

正規表現 '.+' は、newline 文字を含む、1 つ以上の任意の文字に一致します。パターンが一致した回数をカウントします。

pat = regexpPattern(expression);
count(txt,pat)
ans = 1

新しい正規表現パターンを作成します。ただし、今度は、DotExceptNewlinetrue に指定し、パターンが newline 文字に一致しないようにします。パターンが一致した回数をカウントします。

pat = regexpPattern(expression,"DotExceptNewline",true);
count(txt,pat)
ans = 2

txt を string として作成します。

txt = "Hello World";

'. *' は、.* の間に空白があるため、個別の文字のみに一致します。正規表現 '. *' に一致するパターンを作成し、パターンを抽出します。

expression = '. *';
pat = regexpPattern(expression);
extract(txt,pat)
ans = 10x1 string
    "H"
    "e"
    "l"
    "l"
    "o "
    "W"
    "o"
    "r"
    "l"
    "d"

新しい正規表現を作成します。ただし、今度は、FreeSpacingtrue に指定し、正規表現内の空白が無視されるようにします。新しいパターンを抽出します。

pat = regexpPattern(expression,"FreeSpacing",true);
extract(txt,pat)
ans = 
"Hello World"

c で始まり、t で終わり、その間に 1 文字以上の母音を含む単語を、大文字と小文字を区別せずに検索します。

txt = "bat cat can car coat court CUT ct CAT-scan";
expression = 'c[aeiou]+t';

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

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

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

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

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

パターンを抽出します。単語 CUT と CAT は大文字であるため一致しないことに注意してください。

pat = regexpPattern(expression);
extract(txt,pat)
ans = 2x1 string
    "cat"
    "coat"

新しい正規表現パターンを作成します。ただし、今度は、IgnoreCasetrue に指定し、正規表現で大文字と小文字の区別が無視されるようにします。新しいパターンを抽出します。

pat = regexpPattern(expression,"IgnoreCase",true);
extract(txt,pat)
ans = 4x1 string
    "cat"
    "coat"
    "CUT"
    "CAT"

メタ文字 ^$ は、行アンカーまたはテキスト アンカーを指定するために使用できます。その regexpPattern で使用される動作は、Anchors オプションによって指定されます。

txt を、newline 文字を含む string として作成します。

txt = "cat" + newline + "bat" + newline + "rat";

正規表現 '^.+?$' は、2 つのアンカーに挟まれた 1 つ以上の文字に一致します。この正規表現のパターンを作成し、Anchors“text” に指定し、アンカー ^ および $ がテキスト アンカーとして扱われるようにします。パターンを抽出します。

expression = '^.+?$';
pat = regexpPattern(expression,"Anchors","text");
extract(txt,pat)
ans = 
    "cat
     bat
     rat"

新しい正規表現パターンを作成します。ただし、今度は、Anchors“line” に指定し、アンカー ^ および $ が行アンカーとして扱われるようにします。新しいパターンを抽出します。

pat = regexpPattern(expression,"Anchors","line");
extract(txt,pat)
ans = 3x1 string
    "cat"
    "bat"
    "rat"

入力引数

すべて折りたたむ

正規表現。文字ベクトル、文字ベクトルの 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 は任意の正規表現を表します。

量指定子

表現の出現回数

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 である人の姓が含まれているトークンをキャプチャします。

名前付きトークン演算子

説明

(?<name>expr)

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

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

メモ

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

コメント

文字

説明

(?#comment)

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

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

検索フラグ

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

フラグ

説明

(?-i)

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

(?i)

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

(?s)

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

(?-s)

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

(?-m)

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

(?m)

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

(?-x)

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

(?x)

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

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

(?i)\w*

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

(?i:\w*)

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

データ型: char | cell | string

メモ

regexpPattern は、前方参照、前方参照に基づく条件、および動的正規表現をサポートしていません。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

例: 'DotExceptNewline',true,'FreeSpacing',false

newline 文字のドット一致。'DotExceptNewline' と logical スカラーで構成されるコンマ区切りのペアとして指定します。このオプションを 0 (false) に設定すると、newline 文字がドット一致から除外されます。

例: pat = regexpPattern('m.','DotExceptNewline',true)

空白文字に一致。'FreeSpacing' と logical スカラーで構成されるコンマ区切りのペアとして指定します。このオプションを 1 (true) に設定すると、一致時に空白文字とコメントが除外されます。

例: pat = regexpPattern('m.','FreeSpacing',false)

一致時に大文字小文字の区別を無視。'IgnoreCase' と logical スカラーで構成されるコンマ区切りのペアとして指定します。このオプションを 1 (true) に設定すると、大文字と小文字を区別せずに一致します。

例: pat = regexpPattern('m.','IgnoreCase',true)

メタ文字の取り扱い。'Anchors' と次の値のいずれかで構成されるコンマ区切りのペアとして指定します。

説明
'text'メタ文字 ^ および $ をテキスト アンカーとして扱います。これにより、正規表現の一致は、テキスト (複数行にわたる場合もある) の先頭または末尾にアンカリングされます。
'line'メタ文字 ^ および $ を行アンカーとして扱います。これにより、正規表現の一致は、テキストに含まれる行の先頭または末尾にアンカリングされます。このオプションは、複数行のテキストがあり、複数行にわたる一致を望まない場合に役立ちます。

例: pat = regexpPattern('\d+','Anchors','line')

出力引数

すべて折りたたむ

パターン式。patternオブジェクトとして返されます。

拡張機能

スレッドベースの環境
MATLAB® の backgroundPool を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool を使用してコードを高速化します。

バージョン履歴

R2020b で導入