문자열에서 검색하기

문자열에서 검색하기 (Searching in Strings)

문자열은 문자 배열이기 때문에, 문자열 사이의 비교는 다음 예처럼 요소별로 이뤄져요.

출처: Searching in Strings

본문

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

두 문자열이 완전히 같은지 판별하려면 strcmp 함수를 써야 해요. strcmp는 문자열 전체를 비교하며 대소문자를 구분합니다. strncmp는 처음 N개의 문자만 비교해요(N은 매개변수로 주어집니다). strcmpistrncmpi는 대소문자를 구분하지 않는 비교 함수입니다.

  • tf = strcmp (str1, str2) ¶** — 문자 문자열 str1str2가 같으면 1, 다르면 0을 돌려줍니다.

str1 또는 str2 중 하나가 문자열 셀 배열이면 같은 크기의 배열을 돌려주고, 그 배열은 셀 배열의 모든 요소에 대해 위에서 설명한 값을 담아요. 다른 인자는 문자열 셀 배열(같은 크기 또는 요소 하나짜리), 문자 행렬, 문자 문자열이 될 수 있습니다.

주의: MATLAB과의 호환성을 위해 Octave의 strcmp 함수는 문자가 같으면 1, 다르면 0을 돌려줘요. 이는 해당 C 라이브러리 함수와 정반대입니다.

참고: strcmpi, strncmp, strncmpi.

  • tf = strncmp (str1, str2, n) ¶** — 문자열 str1str2의 처음 n개 문자가 같으면 1, 다르면 0을 돌려줍니다.
strncmp ("abce", "abcd", 3)
      ⇒  1

str1 또는 str2 중 하나가 문자열 셀 배열이면 같은 크기의 배열을 돌려줘요.

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

주의: MATLAB 호환성을 위해 Octave의 strncmp 함수는 문자가 같으면 true, 다르면 false를 돌려줘요. 해당 C 라이브러리 함수와 정반대입니다. 또한 Octave의 strncmp 함수는 N = 0이면 true를 돌려줍니다.

MATLAB 비호환성: Octave의 strncmp 함수는 N < 0이면 오류를 내지만, MATLAB은 N < 0을 N = 0과 동일하게 취급해 항상 true를 돌려줘요.

참고: strncmpi, strcmp, strcmpi.

  • tf = strcmpi (str1, str2) ¶** — 문자 문자열 str1str2가 알파벳의 대소문자를 무시하고 같으면 1, 다르면 0을 돌려줍니다.

str1 또는 str2 중 하나가 문자열 셀 배열이면 같은 크기의 배열을 돌려줘요. 다른 인자는 문자열 셀 배열, 문자 행렬, 문자 문자열이 될 수 있습니다.

주의: MATLAB 호환성을 위해 Octave의 strcmpi 함수는 문자가 같으면 1, 다르면 0을 돌려줘요. 해당 C 라이브러리 함수와 정반대입니다.

주의: 국가별 알파벳은 지원되지 않습니다.

참고: strcmp, strncmp, strncmpi.

  • tf = strncmpi (str1, str2, n) ¶** — s1s2의 처음 n개 문자가 알파벳의 대소문자를 무시하고 같으면 1, 다르면 0을 돌려줍니다.

str1 또는 str2 중 하나가 문자열 셀 배열이면 같은 크기의 배열을 돌려줘요.

주의: MATLAB 호환성을 위해 Octave의 strncmpi 함수는 문자가 같으면 true, 다르면 false를 돌려줘요. 해당 C 라이브러리 함수와 정반대입니다. 또한 Octave의 strncmpi 함수는 N = 0이면 true를 돌려줍니다.

MATLAB 비호환성: Octave의 strncmpi 함수는 N < 0이면 오류를 내지만, MATLAB은 N < 0을 N = 0과 동일하게 취급해 항상 true를 돌려줘요.

주의: 국가별 알파벳은 지원되지 않습니다.

참고: strncmp, strcmp, strcmpi.

이런 비교 함수들 외에도, 문자열 안에서 검색 패턴의 위치(인덱스)를 찾는 더 특화된 함수들이 있어요.

  • retval = startsWith (str, pattern)retval = startsWith (str, pattern, "IgnoreCase", ignore_case) ¶** — 문자열이 패턴으로 시작하는지 검사합니다.

입력 str(단일 문자열 또는 문자열 셀 배열)의 어떤 문자열이 입력 pattern(단일 문자열 또는 문자열 셀 배열)으로 시작하는지를 나타내는 논리 값 배열을 돌려줘요.

"IgnoreCase" 매개변수 값이 true이면 strpattern의 대소문자를 무시합니다. 기본값은 대소문자 구분 비교입니다.

예:

## 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

참고: endsWith, regexp, strncmp, strncmpi.

  • retval = endsWith (str, pattern)retval = endsWith (str, pattern, "IgnoreCase", ignore_case) ¶** — 문자열이 패턴으로 끝나는지 검사합니다.

입력 str의 어떤 문자열이 입력 pattern으로 끝나는지를 나타내는 논리 값 배열을 돌려줘요. "IgnoreCase"가 true면 대소문자를 무시하고, 기본값은 대소문자 구분입니다.

참고: startsWith, regexp, strncmp, strncmpi.

  • v = findstr (s, t)v = findstr (s, t, overlap) ¶** — 이 함수는 더 이상 쓰이지 않습니다(obsolete). strfind를 사용하세요.

두 문자열 st 중 더 긴 문자열에서 더 짧은 문자열의 시작이 나타나는 모든 위치의 벡터를 돌려줘요. 선택 인자 overlap이 true(기본값)이면 반환 벡터에 겹치는 위치가 포함될 수 있습니다. 예:

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

주의: findstr는 더 이상 쓰이지 않아요. 새 코드에서는 항상 strfind를 사용하세요.

참고: 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를 쓰는 것보다 빠릅니다.

참고: find.

  • n = index (s, t)n = index (s, t, direction) ¶** — 문자열 s에서 문자열 t가 처음 나타나는 위치를 돌려주고, 찾지 못하면 0을 돌려줍니다.

s는 문자열 배열 또는 문자열 셀 배열일 수도 있어요. 예:

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

direction"first"이면 처음 찾은 요소를, "last"이면 마지막 찾은 요소를 돌려줍니다.

참고: find, rindex.

  • n = rindex (s, t) ¶** — 문자 문자열 s에서 t가 마지막으로 나타나는 위치를 돌려주고, 찾지 못하면 0을 돌려줍니다.

s는 문자열 배열 또는 문자열 셀 배열일 수도 있어요. 예:

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

rindex 함수는 direction"last"로 설정한 index와 동일해요.

참고: 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에서 pattern을 검색하고, 각 등장의 시작 인덱스를 벡터 idx로 돌려줍니다.

등장이 없거나 patternstr보다 길거나 pattern 자체가 비어 있으면 idx는 빈 배열 []이에요. 선택 인자 "overlaps"는 패턴이 str의 모든 위치에서 매칭될 수 있는지(true), 완전한 패턴의 중복 없는 등장에만 매칭되는지(false)를 정해요. 기본값은 true입니다. 문자열 셀 배열 cellstr을 지정하면 idx는 위에서 설명한 대로 벡터들의 셀 배열이 돼요. 선택 인자 "forcecelloutput"idx를 벡터들의 셀 배열로 강제하며 기본값은 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)
        }

참고: regexp, regexpi, find.

  • idx = strmatch (s, A)idx = strmatch (s, A, "exact") ¶** — 이 함수는 더 이상 쓰이지 않습니다(obsolete). 대안으로 strncmpstrcmp를 사용하세요.

A의 항목 중 문자열 s로 시작하는 항목의 인덱스를 돌려줘요. 두 번째 인자 A는 문자열, 문자 행렬, 문자열 셀 배열이어야 합니다. 세 번째 인자 "exact"를 주지 않으면 ss의 길이만큼만 A와 매칭되면 돼요. 매칭할 때 sA의 끝 공백과 널은 무시됩니다.

주의: strmatch는 더 이상 쓰이지 않아요(문자열 셀 배열과 함께 쓸 때 MATLAB에서 잘못된 결과를 낼 수도 있습니다). 새 코드에서는 일반적인 경우 strncmp, "exact"인 경우 strcmp를 사용하세요. 응용에 따라 regexpvalidatestring도 대안이 될 수 있어요.

참고: strncmp, strcmp, regexp, strfind, validatestring.

더 알아보기