pattern
テキストの検索および一致に使用されるパターン
説明
"パターン" は、contains
、matches
、extract
などのテキスト検索関数を使用して、テキストを一致させる際のルールを定義します。"パターン式" は、パターン関数、演算子、リテラル テキストを使用して作成できます。たとえば、MATLAB® のリリース名は、"R"
で始まり、その後に 4 桁の年、そして "a"
または "b"
のいずれかが続きます。このリリース名の形式に一致するパターンを定義します。
pat = "R" + digitsPattern(4) + ("a"|"b");
このパターンを string で一致させます。
str = ["String was introduced in R2016b." "Pattern was added in R2020b."]; extract(str,pat)
ans = 2x1 string array "R2016b" "R2020b"
作成
パターンは、+
、|
、および ~
演算子を使用して、リテラル テキストとその他のパターンによって構成されます。オブジェクト関数を使用して、共通のパターンを作成することもできます。これらは、多くの場合、正規表現と関連します。
文字一致パターン – 幅広い文字と数字、ワイルドカード、または空白。例:
lettersPattern
。検索ルール – パターンが出現しなければならない回数、大文字と小文字の区別、オプションのパターン、名前付きの式。例:
asManyOfPattern
およびoptionalPattern
。境界 – 一連の特定の文字の開始境界または終了境界。例:
alphanumericBoundary
。境界パターンは~
演算子を使用して否定できます。そのため、境界に一致した場合はパターン式に一致しなくなります。パターンの構成 – パターンの構造を定義し、パターン式の表示方法を指定します。例:
maskedPattern
およびnamedPattern
。
構文 pat = pattern(txt)
を使用することで、関数 pattern
でパターン関数を作成することもできます。ここで、txt
は pat
が一致するリテラル テキストです。パターン関数は、関数の引数の検証のためにパターン タイプを指定するのに役立ちます。しかし、MATLAB のテキスト一致関数はテキスト入力を受け入れるため、その他のケースで pattern
関数が必要になることはほとんどありません。
オブジェクト関数
contains | パターンが文字列内にあるかどうかの判別 |
matches | パターンが string と一致するかどうかの判別 |
count | 文字列内でのパターンの出現回数をカウント |
endsWith | 文字列がパターンで終了しているかどうかを判別 |
startsWith | 文字列がパターンで開始するかどうかの判別 |
extract | string から部分文字列を抽出する |
replace | 1 つ以上の部分文字列の検索および置換 |
replaceBetween | 始点と終点の間の部分文字列の置換 |
split | 区切り記号での string の分割 |
erase | 文字列内の部分文字列の削除 |
eraseBetween | 開始点と終了点の間の部分文字列を削除 |
extractAfter | 指定した位置の後にある部分文字列を抽出 |
extractBefore | 指定した位置の前にある部分文字列を抽出 |
extractBetween | 開始点と終了点の間にある部分文字列を抽出 |
insertAfter | 指定した部分文字列の後に文字列を挿入 |
insertBefore | 指定した部分文字列の前に文字列を挿入 |
digitsPattern | 数字に一致する |
lettersPattern | 文字に一致 |
alphanumericsPattern | 文字と数字に一致させる |
characterListPattern | リストの文字に一致する |
whitespacePattern | 空白文字に一致 |
wildcardPattern | 任意の種類のできるだけ少ない文字に一致 |
optionalPattern | パターンの一致をオプションにする |
possessivePattern | バックトラッキングなしでパターンに一致する |
caseSensitivePattern | 大文字と小文字を区別してパターンに一致させる |
caseInsensitivePattern | 大文字と小文字を区別せずにパターンに一致させる |
asFewOfPattern | パターンにできるだけ少ない回数一致する |
asManyOfPattern | パターンにできるだけ多くの回数一致する |
alphanumericBoundary | 英数字と英数字以外の文字の間にある境界に一致させる |
digitBoundary | 数字と数字以外の文字との境界に一致 |
letterBoundary | 文字と文字以外のものとの境界に一致 |
whitespaceBoundary | 空白文字と空白文字以外の文字の間にある境界に一致する |
lineBoundary | 行頭または行末に一致 |
textBoundary | テキストの先頭または末尾に一致する |
lookAheadBoundary | 指定したパターンの前にある境界に一致する |
lookBehindBoundary | 指定したパターンの後にある境界に一致する |
regexpPattern | 指定した正規表現に一致するパターン |
maskedPattern | 指定した表示名をもつパターン |
namedPattern | 名前付きパターンを指定する |
例
lettersPattern
は、一般的な文字一致パターンの 1 つで、文字に一致します。1 つ以上の文字に一致するパターンを作成します。
txt = ["This" "is a" "1x6" "string" "array" "."]; pat = lettersPattern;
contains
を使用して、pat
に一致する文字が各 string に存在するかどうかを判別します。出力された logical 配列から、txt
の最初の 5 つの string には文字が含まれますが、6 つ目の string には含まれないことが分かります。
contains(txt,pat)
ans = 1×6 logical array
1 1 1 1 1 0
テキストが指定されたパターンで始まっているかどうかを判別します。出力された logical 配列から、txt
のうち 4 つの string は文字で始まっているが、2 つの string はそうではないことが分かります。
startsWith(txt,pat)
ans = 1×6 logical array
1 1 0 1 1 0
string が指定されたパターンに完全に一致するかどうかを判別します。出力された logical 配列から、txt
のうち、文字しか含まない string がどれであるかが分かります。
matches(txt,pat)
ans = 1×6 logical array
1 0 0 1 1 0
パターンが一致した回数をカウントします。出力された数値配列から、lettersPattern
が txt
の各要素で何回一致したかが分かります。lettersPattern
は、1 つ以上の文字に一致するため、連続する複数の文字から成るグループは 1 回の一致になることに注意してください。
count(txt,pat)
ans = 1×6
1 2 1 1 1 0
digitsPattern
は、一般的な文字一致パターンの 1 つで、数字に一致します。数字に一致するパターンを作成します。
txt = ["1 fish" "2 fish" "[1,0,0] fish" "[0,0,1] fish"]; pat = digitsPattern;
replace
を使用して、パターンに一致するテキストの一部を編集します。
replace(txt,pat,"#")
ans = 1×4 string
"# fish" "# fish" "[#,#,#] fish" "[#,#,#] fish"
一致した文字の後に文字 "!"
を挿入して、新しいテキストを作成します。
insertAfter(txt,pat,"!")
ans = 1×4 string
"1! fish" "2! fish" "[1!,0!,0!] fish" "[0!,0!,1!] fish"
パターンは、OR 演算子、|
、テキストを使用して作成できます。指定したパターンに一致するテキストを消去します。
txt = erase(txt,"," | "]" | "[")
txt = 1×4 string
"1 fish" "2 fish" "100 fish" "001 fish"
新しいテキストから pat
を抽出します。
extract(txt,pat)
ans = 1×4 string
"1" "2" "100" "001"
パターンを使用して、テキストに含まれる個々の文字の出現をカウントします。
txt = "She sells sea shells by the sea shore.";
alphanumericsPattern
を使用して、pat
を個別の文字に一致する pattern
オブジェクトとして作成します。パターンを抽出します。
pat = alphanumericsPattern(1); letters = extract(txt,pat);
各文字の出現回数のヒストグラムを表示します。
letters = lower(letters); letters = categorical(letters); histogram(letters)
maskedPattern
を使用して、複雑なパターン式の代わりに変数を表示します。
数字と算術演算子で構成されるシンプルな演算式に一致するパターンを作成します。
mathSymbols = asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1)
mathSymbols = pattern
Matching:
asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1)
mathSymbols
を使用して、文字と文字の間に空白を含む演算式に一致するパターンを作成します。
longExpressionPat = asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbols
longExpressionPat = pattern
Matching:
asManyOfPattern(asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1) + whitespacePattern) + asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1)
表示されるパターン式は長く、可読性が良くありません。maskedPattern
を使用して、パターン式の代わりに、変数名 mathSymbols
を表示します。
mathSymbols = maskedPattern(mathSymbols); shortExpressionPat = asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbols
shortExpressionPat = pattern
Matching:
asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbols
Show all details
いくつかの演算式を含む string を作成した後、テキストからパターンを抽出します。
txt = "What is the answer to 1 + 1? Oh, I know! 1 + 1 = 2!";
arithmetic = extract(txt,shortExpressionPat)
arithmetic = 2×1 string
"1 + 1"
"1 + 1 = 2"
2 つの名前付きパターンから 1 つのパターンを作成します。パターンに名前を付けることで、パターンの表示にコンテキストが加わります。
次の 2 つのパターンを作成します。1 つは、先頭と末尾が文字 D である単語に一致させます。もう 1 つは、先頭と末尾が文字 R である単語に一致させます。
dWordsPat = letterBoundary + caseInsensitivePattern("d" + lettersPattern + "d") + letterBoundary; rWordsPat = letterBoundary + caseInsensitivePattern("r" + lettersPattern + "r") + letterBoundary;
先頭と末尾が D である単語の後に、先頭と末尾が R である単語が続くものを検索する名前付きパターンを使用して、パターンを作成します。
dAndRWordsPat = dWordsPat + whitespacePattern + rWordsPat
dAndRWordsPat = pattern
Matching:
letterBoundary + caseInsensitivePattern("d" + lettersPattern + "d") + letterBoundary + whitespacePattern + letterBoundary + caseInsensitivePattern("r" + lettersPattern + "r") + letterBoundary
このパターンは可読性が悪く、その目的について多くの情報が伝わりません。このパターンを、namedPattern
を使用して、パターン式の代わりに、指定された名前と説明を表示する名前付きパターンとして指定します。
dWordsPat = namedPattern(dWordsPat,"dWords", "Words that start and end with D"); rWordsPat = namedPattern(rWordsPat,"rWords", "Words that start and end with R"); dAndRWordsPat = dWordsPat + whitespacePattern + rWordsPat
dAndRWordsPat = pattern
Matching:
dWords + whitespacePattern + rWords
Using named patterns:
dWords: Words that start and end with D
rWords: Words that start and end with R
Show more details
string を作成し、パターンに一致するテキストを抽出します。
txt = "Dad, look at the divided river!";
words = extract(txt,dAndRWordsPat)
words = "divided river"
メール アドレスに一致する、可読性の高いパターンを作成します。
メール アドレスは、username@domain.TLD の構造になっています。ここで、username と domain は、ピリオドで区切られた識別子で構成されます。英数字および "_"
文字の任意の組み合わせから成る識別子に一致するパターンを作成します。maskedPattern
を使用して、このパターンに identifier
という名前を付けます。
identifier = asManyOfPattern(alphanumericsPattern(1) | "_", 1);
identifier = maskedPattern(identifier);
識別子で構成されるドメインおよびサブドメインに一致するパターンを作成します。指定されたリストに含まれる TLD に一致するパターンを作成します。
subdomain = asManyOfPattern(identifier + ".") + identifier; domainName = namedPattern(identifier,"domainName"); tld = "com" | "org" | "gov" | "net" | "edu";
メールのローカル部分 (ピリオドで区切られた 1 つ以上の識別子) に一致するパターンを作成します。これまで定義したパターンを組み合わせて、ドメイン、TLD、および可能な任意のサブドメインに一致するパターンを作成します。namedPattern
を使用して、これらの各パターンを名前付きパターンに割り当てます。
username = asManyOfPattern(identifier + ".") + identifier; domain = optionalPattern(namedPattern(subdomain) + ".") + ... domainName + "." + ... namedPattern(tld);
これらすべてのパターンを組み合わせて、1 つのパターン式にします。namedPattern
を使用して、名前付きパターンに username
、domain
、および emailPattern
を割り当てます。
emailAddress = namedPattern(username) + "@" + namedPattern(domain);
emailPattern = namedPattern(emailAddress)
emailPattern = pattern
Matching emailAddress:
username + "@" + domain
Using named patterns:
emailAddress : username + "@" + domain
username : asManyOfPattern(identifier + ".") + identifier
domain : optionalPattern(subdomain + ".") + domainName + "." + tld
subdomain : asManyOfPattern(identifier + ".") + identifier
domainName: identifier
tld : "com" | "org" | "gov" | "net" | "edu"
Show all details
メール アドレスを 1 つ含む string を作成し、テキストからパターンを抽出します。
txt = "You can reach me by email at John.Smith@department.organization.org";
extract(txt,emailPattern)
ans = "John.Smith@department.organization.org"
名前付きパターンを使用すると、名前付きのサブパターンにアクセスするためのドット インデックスを付けることができます。ドット インデックスを使用して、名前付きパターン domain
に特定の値を割り当てます。
emailPattern.emailAddress.domain = "mathworks.com"
emailPattern = pattern
Matching emailAddress:
username + "@" + domain
Using named patterns:
emailAddress: username + "@" + domain
username : asManyOfPattern(identifier + ".") + identifier
domain : "mathworks.com"
Show all details
拡張機能
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
バージョン履歴
R2020b で導入
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)