.3.4 Searching in Strings

Last-modified: 2025-03-21 (金) 20:39:13

5.3.4 文字列内の検索

文字列は文字配列であるため、文字列間の比較は、次の例に示すように要素ごとに行われます。

GNU = "GNU's Not UNIX";
spaces = (GNU == " ")
    ⇒ spaces =
      0   0   0   0   0   1   0   0   0   1   0   0   0   0

2 つの文字列が同一かどうかを判断するには、 関数を使用する必要があります strcmp。これは完全な文字列を比較し、大文字と小文字を区別します 。strncmpは最初のN文字のみを比較します ( Nパラメーターとして指定)。 strcmpiおよび は、strncmpi大文字と小文字を区別しない比較に対応する関数です。

: tf = strcmp (str1, str2)

文字列str1とstr2が同じ場合は 1 を返し、そうでない場合は 0 を返します。

str1またはstr2のいずれかが文字列のセル配列である場合、セル配列の各メンバーに対して上記の値を含む同じサイズの配列が返されます。他の引数は、文字列のセル配列 (同じサイズまたは 1 つの要素のみ)、char マトリックス、または文字列にすることもできます。

注意: MATLABとの互換性のため、Octave の strcmp 関数は、文字列が等しい場合は 1 を返し、そうでない場合は 0 を返します。これは、対応する C ライブラリ関数の逆です。

See also: strcmpi, strncmp, strncmpi.

: tf = strncmp (str1, str2, n)

文字列str1とstr2の最初のn文字 が同じ場合は 1 を返し、そうでない場合は 0 を返します。.

strncmp ("abce", "abcd", 3)
     ⇒ 1

str1またはstr2のいずれかが文字列のセル配列である場合、セル配列の各メンバーに対して上記の値を含む同じサイズの配列が返されます。他の引数は、文字列のセル配列 (同じサイズまたは 1 つの要素のみ)、char マトリックス、または文字列にすることもできます。

strncmp ("abce", {"abcd", "bca", "abc"}, 3)
    ⇒ [1, 0, 1]

注意: MATLABとの互換性のため、Octave の strncmp 関数は、文字列が等しい場合は 1 を返し、そうでない場合は 0 を返します。これは、対応する C ライブラリ関数の逆です。

See also: strncmpi, strcmp, strcmpi.

: tf = strcmpi (str1, str2)

アルファベットの大文字と小文字を区別せずに文字列str1とstr2が同じ場合は 1 を返し、そうでない場合は 0 を返します。

str1またはstr2のいずれかが文字列のセル配列である場合、セル配列の各メンバーに対して上記の値を含む同じサイズの配列が返されます。他の引数は、文字列のセル配列 (同じサイズまたは 1 つの要素のみ)、char マトリックス、または文字列にすることもできます。

注意: MATLABとの互換性のため、Octave の strcmp 関数は、文字列が等しい場合は 1 を返し、そうでない場合は 0 を返します。これは、対応する C ライブラリ関数の逆です。

注意:国別アルファベットはサポートされていません。

Caution: National alphabets are not supported.

See also: strcmp, strncmp, strncmpi.

: tf = strncmpi (str1, str2, n)

アルファベットの大文字と小文字を区別せずに、 s1とs2の最初のn文字が同じ場合は 1 を返し、そうでない場合は 0 を返します。

str1またはstr2のいずれかが文字列のセル配列である場合、セル配列の各メンバーに対して上記の値を含む同じサイズの配列が返されます。他の引数は、文字列のセル配列 (同じサイズまたは 1 つの要素のみ)、char マトリックス、または文字列にすることもできます。

注意: MATLABとの互換性のため、Octave の strncmpi 関数は、文字列が等しい場合は 1 を返し、そうでない場合は 0 を返します。これは、対応する C ライブラリ関数の逆です。

注意:国別アルファベットはサポートされていません。

See also: strncmp, strcmp, strcmpi.

これらの比較関数に加えて、文字列内の検索パターンのインデックス位置を見つけるための、より特殊な関数もあります。

: retval = startsWith (str, pattern)

: retval = startsWith (str, pattern, "IgnoreCase", ignore_case)

文字列がパターンで始まるかどうかを確認します。

入力str (単一の文字列または文字列のセル配列) 内のどの文字列が入力パターン(単一の文字列または文字列のセル配列) で始まるかを示す論理値の配列を返します。

パラメータの値"IgnoreCase"が true の場合、関数はstrとpatternの大文字と小文字を無視します。デフォルトでは、比較は大文字と小文字を区別します。

例:

## one string and one pattern while considering case
startsWith ("hello", "he")
     ⇒  1
## one string and one pattern while ignoring case
startsWith ("hello", "HE", "IgnoreCase", true)
     ⇒  1
## multiple strings and multiple patterns while considering case
startsWith ({"lab work.pptx", "data.txt", "foundations.ppt"},
           {"lab", "data"})
     ⇒  1  1  0
## multiple strings and one pattern while considering case
startsWith ({"DATASHEET.ods", "data.txt", "foundations.ppt"},
           "data", "IgnoreCase", false)
     ⇒  0  1  0
## multiple strings and one pattern while ignoring case
startsWith ({"DATASHEET.ods", "data.txt", "foundations.ppt"},
           "data", "IgnoreCase", true)
     ⇒  1  1  0

See also: endsWith, regexp, strncmp, strncmpi.

: retval = endsWith (str, pattern)

: retval = endsWith (str, pattern, "IgnoreCase", ignore_case)

文字列がパターンで終わるかどうかを確認します。

入力str (単一の文字列または文字列のセル配列) 内のどの文字列が入力パターン(単一の文字列または文字列のセル配列) で終わるかを示す論理値の配列を返します。

パラメータの値"IgnoreCase"が true の場合、関数はstrとpatternの大文字と小文字を無視します。デフォルトでは、比較は大文字と小文字を区別します。

例:

## one string and one pattern while considering case
endsWith ("hello", "lo")
     ⇒  1
## one string and one pattern while ignoring case
endsWith ("hello", "LO", "IgnoreCase", true)
     ⇒  1
## multiple strings and multiple patterns while considering case
endsWith ({"tests.txt", "mydoc.odt", "myFunc.m", "results.pptx"},
         {".docx", ".odt", ".txt"})
     ⇒  1  1  0  0
## multiple strings and one pattern while considering case
endsWith ({"TESTS.TXT", "mydoc.odt", "result.txt", "myFunc.m"},
         ".txt", "IgnoreCase", false)
     ⇒  0  0  1  0
## multiple strings and one pattern while ignoring case
endsWith ({"TESTS.TXT", "mydoc.odt", "result.txt", "myFunc.m"},
         ".txt", "IgnoreCase", true)
     ⇒  1  0  1  0

See also: startsWith, regexp, strncmp, strncmpi.

: v = findstr (s, t)

: v = findstr (s, t, overlap)

この関数は廃止されました。strfind代わりに を使用してください。

2 つの文字列s とtのうち長い方の文字列内で、短い方の文字列の出現が始まる すべての位置のベクトルを返します。

オプション引数の重複が true (デフォルト) の場合、返されるベクトルには重複する位置が含まれることがあります。例:

findstr ("ababab", "a")
    ⇒ [1, 3, 5];
findstr ("abababa", "aba", 0)
    ⇒ [1, 5]

注意: findstrは廃止されています。strfindすべての新しいコードで使用してください。

See also: strfind, strmatch, strcmp, strncmp, strcmpi, strncmpi, find.

: idx = strchr (str, chars)

: idx = strchr (str, chars, n)

: idx = strchr (str, chars, n, direction)

: [i, j] = strchr (…)

文字列str内で、セットcharsの文字の出現を検索します。

戻り値、およびnとdirection引数は、 と同じように動作しますfind。

regexpほとんどの場合、 これを使用するよりも高速になります。

See also: find.

: n = index (s, t)

: n = index (s, t, direction)

文字列s内で文字列tが最初に出現する位置を返します。出現が見つからない場合は 0 を返します。

s は文字列配列または文字列のセル配列にすることもできます。

例えば:

index ("Teststring", "t")
   ⇒ 4

方向が の場合"first"、最初に見つかった要素を返します。方向が の場合"last"、最後に見つかった要素を返します。

See also: find, rindex.

: n = rindex (s, t)

文字列s内で文字列tが最後に出現する位置を返します 。出現が見つからない場合は 0 を返します。

s は文字列配列または文字列のセル配列にすることもできます。

例えば:

rindex ("Teststring", "t")
    ⇒ 6

この関数は、方向が に設定されたと rindex同等です。 index"last"

See also: find, index.

: idx = unicode_idx (str)

str内の各 UTF-8 エンコード文字のインデックスを含む配列を返します。

unicode_idx ("aäbc")
    ⇒ [1, 2, 2, 3, 4]

: idx = strfind (str, pattern)

: idx = strfind (cellstr, pattern)

: idx = strfind (…, "overlaps", val)

: idx = strfind (…, "forcecelloutput", val)

文字列str内でパターンを検索し、ベクトルidx内でそのような出現箇所の開始インデックスを返します。

そのような出現がない場合、またはpattern がstrより長い 場合、またはpattern自体が空の場合、idx は空の配列になります[]。

オプションの引数は"overlaps"、パターンがstr内のすべての位置で一致するか(true)、完全なパターンの一意の出現のみに一致するか (false) を決定します。デフォルトは true です。

文字列のセル配列cellstrが指定されている場合、 idx は上記で指定されたベクトルのセル配列になります。

オプションの引数は、idx を"forcecelloutput"ベクトルのセル配列として返すように強制します。デフォルトは false です。

例:

strfind ("abababa", "aba")
    ⇒ [1, 3, 5]
strfind ("abababa", "aba", "overlaps", false)
    ⇒ [1, 5]
strfind ({"abababa", "bebebe", "ab"}, "aba")
    ⇒
       {
         [1,1] =
            1   3   5
         [1,2] = [](1x0)
         [1,3] = [](1x0)
       }
strfind ("abababa", "aba", "forcecelloutput", true)
    ⇒
       {
         [1,1] =
            1   3   5
       }

See also: regexp, regexpi, find.

: idx = strmatch (s, A)

: idx = strmatch (s, A, "exact")

この関数は廃止されました。 代わりに または などの代替手段を使用してください。 strncmpstrcmp

文字列sで始まるAのエントリのインデックスを返します。

2 番目の引数A は、文字列、文字行列、または文字列のセル配列である必要があります。

3 番目の引数"exact"が指定されていない場合、sはsの長さまでAと一致する必要があります。 sとAの末尾のスペースと null は一致時に無視されます。

例えば:

strmatch ("apple", "apple juice")
    ⇒ 1
strmatch ("apple", ["apple  "; "apple juice"; "an apple"])
    ⇒ [1; 2]
strmatch ("apple", ["apple  "; "apple juice"; "an apple"], "exact")
    ⇒ [1]

注意: strmatchは廃止されており、文字列のセル配列で使用すると MATLABstrncmpで誤った結果が生じる可能性があります。すべての新しいコードでは、 (通常のケース) またはstrcmp("exact"ケース) を使用してください。アプリケーションに応じて、その他の代替手段としては、regexpまたはなどがありますvalidatestring

See also: strncmp, strcmp, regexp, strfind, validatestring.