문자열에서 검색하기
문자열에서 검색하기 (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은 매개변수로 주어집니다). strcmpi와 strncmpi는 대소문자를 구분하지 않는 비교 함수입니다.
tf =strcmp(str1, str2)¶** — 문자 문자열str1과str2가 같으면 1, 다르면 0을 돌려줍니다.
str1 또는 str2 중 하나가 문자열 셀 배열이면 같은 크기의 배열을 돌려주고, 그 배열은 셀 배열의 모든 요소에 대해 위에서 설명한 값을 담아요. 다른 인자는 문자열 셀 배열(같은 크기 또는 요소 하나짜리), 문자 행렬, 문자 문자열이 될 수 있습니다.
주의: MATLAB과의 호환성을 위해 Octave의 strcmp 함수는 문자가 같으면 1, 다르면 0을 돌려줘요. 이는 해당 C 라이브러리 함수와 정반대입니다.
참고: strcmpi, strncmp, strncmpi.
tf =strncmp(str1, str2, n)¶** — 문자열str1과str2의 처음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)¶** — 문자 문자열str1과str2가 알파벳의 대소문자를 무시하고 같으면 1, 다르면 0을 돌려줍니다.
str1 또는 str2 중 하나가 문자열 셀 배열이면 같은 크기의 배열을 돌려줘요. 다른 인자는 문자열 셀 배열, 문자 행렬, 문자 문자열이 될 수 있습니다.
주의: MATLAB 호환성을 위해 Octave의 strcmpi 함수는 문자가 같으면 1, 다르면 0을 돌려줘요. 해당 C 라이브러리 함수와 정반대입니다.
주의: 국가별 알파벳은 지원되지 않습니다.
참고: strcmp, strncmp, strncmpi.
tf =strncmpi(str1, str2, n)¶** —s1과s2의 처음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이면 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
참고: 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를 사용하세요.
두 문자열 s와 t 중 더 긴 문자열에서 더 짧은 문자열의 시작이 나타나는 모든 위치의 벡터를 돌려줘요. 선택 인자 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로 돌려줍니다.
등장이 없거나 pattern이 str보다 길거나 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). 대안으로strncmp나strcmp를 사용하세요.
A의 항목 중 문자열 s로 시작하는 항목의 인덱스를 돌려줘요. 두 번째 인자 A는 문자열, 문자 행렬, 문자열 셀 배열이어야 합니다. 세 번째 인자 "exact"를 주지 않으면 s는 s의 길이만큼만 A와 매칭되면 돼요. 매칭할 때 s와 A의 끝 공백과 널은 무시됩니다.
주의: strmatch는 더 이상 쓰이지 않아요(문자열 셀 배열과 함께 쓸 때 MATLAB에서 잘못된 결과를 낼 수도 있습니다). 새 코드에서는 일반적인 경우 strncmp, "exact"인 경우 strcmp를 사용하세요. 응용에 따라 regexp나 validatestring도 대안이 될 수 있어요.
참고: strncmp, strcmp, regexp, strfind, validatestring.