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) ⇒ 1str1または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.