strfind
文字列内の文字列の検出
説明
は、k
= strfind(str
,pat
,'ForceCellOutput',cellOutput
)cellOutput
が true の場合、str
が文字ベクトルでも、強制的に strfind
で k
を cell 配列として返します。
例
文字ベクトル内で部分文字列を検索
文字ベクトル内の部分文字列の開始インデックスを検索します。
まず、文字ベクトルを作成します。
str = 'Find the starting indices of substrings in a character vector';
部分文字列 in
を検索します。
k = strfind(str,'in')
k = 1×5
2 15 19 36 41
str
には 5 つのインスタンスがあります。
部分文字列 In
を検索します。
k = strfind(str,'In')
k = []
strfind
では大文字小文字が区別されるため、この部分文字列は見つかりません。k
は空の配列になります。
str
内の空白を検索します。
k = strfind(str,' ')
k = 1×9
5 9 18 26 29 40 43 45 55
str
には、10 箇所の空白があります。
パターンを使用した文字と単語の検索
R2020b 以降
文字ベクトルを作成します。
str = 'Find the letters.'
str = 'Find the letters.'
関数 lettersPattern
を使用して文字のシーケンスに一致するパターンを作成します。
pat = lettersPattern
pat = pattern
Matching:
lettersPattern
それぞれの文字のインデックスを検索します。pat
は任意の長さをもつ文字のシーケンスに一致しますが、strfind
は一致を見つけると即座に停止し、その後次の一致に進みます。たとえば、'Find'
と 'F'
は両方とも lettersPattern
に一致します。これは、一致についての文字の数が指定されていないためです。ただし、strfind
は最初に 'F'
に一致し、そのインデックスを返します。続いて strfind
は 'i'
に一致し、以下同様に進みます (一致する文字の数を指定するオプションの引数を使用して lettersPattern
を呼び出すこともできます)。
k = strfind(str,pat)
k = 1×14
1 2 3 4 6 7 8 10 11 12 13 14 15 16
単語の開始を見つけるには境界を使用して lettersPattern
を呼び出します。関数 letterBoundary
は文字とアルファベット以外の文字との境界に一致します。
pat = letterBoundary + lettersPattern
pat = pattern
Matching:
letterBoundary + lettersPattern
k = strfind(str,pat)
k = 1×3
1 6 10
pattern オブジェクトを作成する関数の一覧については、pattern
を参照してください。
cell 配列内で部分文字列を検索
文字ベクトルの cell 配列内の部分文字列の開始インデックスを検索します。
文字ベクトルの cell 配列を作成します。
str = {'How much wood would a woodchuck chuck'; 'if a woodchuck could chuck wood?'};
str
で wood
を検索します。
idx = strfind(str,'wood')
idx=2×1 cell array
{[10 23]}
{[ 6 28]}
出力 cell 配列を調べて wood
のインスタンスを見つけます。
idx{:,:}
ans = 1×2
10 23
ans = 1×2
6 28
部分文字列 wood
は、1 番目の文字ベクトルのインデックス 10 と 23 に出現し、2 番目の文字ベクトルのインデックス 6 と 28 に出現します。
cell 配列のインデックスを返す
文字ベクトル内の部分文字列の出現箇所を検索します。strfind
に、出現箇所のインデックスを cell 配列で返すように強制します。次にインデックスを表示します。
文字ベクトルを作成し、パターン ain
の出現箇所を検索します。
str = 'The rain in Spain.'; k = strfind(str,'ain','ForceCellOutput',true)
k = 1x1 cell array
{[6 15]}
strfind
は、数値配列を含むスカラー cell を返します。このセルには、str
における部分文字列 ain
の出現箇所のインデックスが含まれています。セル内の数値配列にアクセスするには、中かっこを使用します。
k{1}
ans = 1×2
6 15
入力引数
str
— 入力テキスト
string 配列 | 文字ベクトル | 文字ベクトルの cell 配列
入力テキスト。string 配列、文字ベクトルまたは文字ベクトルの cell 配列として指定します。
pat
— 検索パターン
string スカラー | 文字ベクトル | pattern
スカラー (R2020b 以降)
検索パターン。次のいずれかとして指定します。
string スカラー
文字ベクトル
pattern
スカラー "(R2020b 以降)"
cellOutput
— 出力を cell 配列で返すことを強制するかどうかのインジケーター
false
(既定値) | true
| 0
| 1
出力を cell 配列で返すことを強制するかどうかのインジケーター。false
、true
、0
または 1
として指定します。
出力引数
ヒント
pat
が文字を含まない文字ベクトルまたは string スカラー (''
または""
) の場合、strfind
は空の配列を返します。string 配列内のパターンの検索には、関数
contains
を推奨します。
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
使用上の注意事項および制限事項:
テキスト入力は、string の tall 配列か、文字ベクトルの tall cell 配列でなければなりません。
パターン入力は単一の string でなければならず、tall 配列や pattern オブジェクトであってはなりません。
出力は、入力 string ごとに要素を 1 つもつインデックス ベクトルの tall cell 配列です。
詳細については、tall 配列を参照してください。
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
str
は string スカラーまたは文字ベクトルでなければなりません。生成されたコードは、空の出力を 1 行 0 列の文字配列として返します。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
分散配列
Parallel Computing Toolbox™ を使用して、クラスターの結合メモリ上で大きなアレイを分割します。
使用上の注意事項および制限事項:
str
は string 配列または文字ベクトルの cell 配列でなければなりません。
詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)