Main Content

strfind

文字列内の文字列の検出

説明

k = strfind(str,pat) は、str 内で pat の出現を検索します。出力 k は、str における pat の各出現の開始インデックスを示します。pat が見つからない場合、strfind は空の配列 [] を返します。関数 strfind は大文字小文字を区別して検索を実行します。

  • str が文字ベクトルまたは string スカラーの場合、strfinddouble 型のベクトルを返します。

  • str が文字ベクトルの cell 配列または string 配列の場合、strfinddouble 型のベクトルの cell 配列を返します。

k = strfind(str,pat,'ForceCellOutput',cellOutput) は、cellOutput が true の場合、str が文字ベクトルでも、強制的に strfindk を 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 配列を作成します。

str = {'How much wood would a woodchuck chuck';
       'if a woodchuck could chuck wood?'};

strwood を検索します。

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 に出現します。

文字ベクトル内の部分文字列の出現箇所を検索します。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

入力引数

すべて折りたたむ

入力テキスト。string 配列、文字ベクトルまたは文字ベクトルの cell 配列として指定します。

検索パターン。次のいずれかとして指定します。

  • string スカラー

  • 文字ベクトル

  • pattern スカラー "(R2020b 以降)"

出力を cell 配列で返すことを強制するかどうかのインジケーター。falsetrue0 または 1 として指定します。

出力引数

すべて折りたたむ

pat の出現のインデックス。配列として返されます。pat が見つからない場合、k は空の配列 [] となります。

  • str が文字ベクトルまたは string スカラーの場合、kpat の各出現のインデックスを示す double のベクトルです。

  • str が文字ベクトルの cell 配列または string 配列の場合、k は cell 配列です。str のテキストごとに、k の対応するセルに、pat の各出現のインデックスを示す double のベクトルが格納されます。

ヒント

  • pat が文字を含まない文字ベクトルまたは string スカラー ('' または "") の場合、strfind は空の配列を返します。

  • string 配列内のパターンの検索には、関数 contains を推奨します。

拡張機能

バージョン履歴

R2006a より前に導入