Main Content

regexp

정규 표현식 일치(대/소문자 구분)

설명

예제

startIndex = regexp(str,expression)은 정규 표현식으로 지정된 문자 패턴과 일치하는 각 str 부분문자열의 시작 인덱스를 반환합니다. 일치 항목이 없으면 startIndex는 빈 배열이 됩니다. 텍스트의 중복되는 부분과 일치하는 부분문자열이 있는 경우 첫 일치 항목의 인덱스만 반환됩니다.

[startIndex,endIndex] = regexp(str,expression)은 모든 일치 항목의 시작 인덱스와 끝 인덱스를 반환합니다.

예제

out = regexp(str,expression,outkey)outkey가 규정하는 출력값을 반환합니다. 예를 들어, outkey'match'인 경우, regexp는 시작 인덱스가 아닌 표현식과 일치하는 부분문자열을 반환합니다.

예제

[out1,...,outN] = regexp(str,expression,outkey1,...,outkeyN)은 여러 출력값 키워드가 지정된 순서대로 규정하는 출력값을 반환합니다. 예를 들어, 'match', 'tokens'를 지정하는 경우, regexp는 전체 표현식과 일치하는 부분문자열, 그리고 일부 표현식과 일치하는 토큰을 반환합니다.

예제

___ = regexp(___,option1,...,optionM)은 지정된 옵션 플래그를 사용하여 검색을 수정합니다. 예를 들어, 대/소문자를 구분하지 않는 일치 작업을 수행하려면 'ignorecase'를 지정하십시오. 위에 열거된 구문의 입력값이나 출력값 어느 것이든 포함시킬 수 있습니다.

예제

___ = regexp(___,'forceCellOutput')은 각 출력 인수를 스칼라 셀로 반환합니다. 셀에는 이전 구문에서 출력값으로 설명된 숫자형 배열이나 부분문자열이 들어 있습니다. 위에 열거된 구문의 입력값이나 출력값 어느 것이든 포함시킬 수 있습니다.

예제

모두 축소

c로 시작하고, t로 끝나며, 그 사이에 하나 이상의 모음이 포함된 단어를 찾습니다.

str = 'bat cat can car coat court CUT ct CAT-scan';
expression = 'c[aeiou]+t';
startIndex = regexp(str,expression)
startIndex = 1×2

     5    17

정규 표현식 'c[aeiou]+t'는 다음과 같은 패턴을 지정합니다.

  • c가 첫 번째 문자여야 합니다.

  • c 다음에는 대괄호로 묶인 [aeiou] 안의 문자 중 하나가 와야 합니다.

  • 대괄호 안의 패턴은 + 연산자가 지정한 대로 한 번 이상 나타나야 합니다.

  • t는 마지막 문자여야 하고, 대괄호 안의 패턴과 t 사이에는 문자가 없어야 합니다.

startIndex의 값은 정규 표현식과 일치하는 각 단어의 첫 번째 문자의 인덱스를 나타냅니다. 일치하는 단어 cat은 인덱스 5에서 시작하고, coat는 인덱스 17에서 시작합니다. 단어 CUTCAT은 대문자이므로 일치하지 않습니다.

셀형 배열의 문자형 벡터 내에서 대문자와 공백 위치를 찾습니다.

str = {'Madrid, Spain','Romeo and Juliet','MATLAB is great'};
capExpr = '[A-Z]';
spaceExpr = '\s';

capStartIndex = regexp(str,capExpr);
spaceStartIndex = regexp(str,spaceExpr);

입력 인수 str이 셀형 배열이므로 capStartIndexspaceStartIndex도 셀형 배열입니다.

대문자에 대한 인덱스를 확인합니다.

celldisp(capStartIndex)
 
capStartIndex{1} =
 
     1     9

 
 
capStartIndex{2} =
 
     1    11

 
 
capStartIndex{3} =
 
     1     2     3     4     5     6

 

공백에 대한 인덱스를 확인합니다.

celldisp(spaceStartIndex)
 
spaceStartIndex{1} =
 
     8

 
 
spaceStartIndex{2} =
 
     6    10

 
 
spaceStartIndex{3} =
 
     7    10

 

문자 x를 포함하는 문자형 벡터 내에서 단어를 캡처합니다.

str = 'EXTRA! The regexp function helps you relax.';
expression = '\w*x\w*';
matchStr = regexp(str,expression,'match')
matchStr = 1x2 cell
    {'regexp'}    {'relax'}

정규 표현식 '\w*x\w*'는 다음과 같은 문자형 벡터를 지정합니다.

  • \w*의 의미대로, 0개 이상의 영숫자나 밑줄 문자로 시작합니다.

  • 소문자 x를 포함합니다.

  • \w*의 의미대로, x 다음에 0개 이상의 영숫자나 밑줄 문자로 끝납니다.

문자형 벡터를 몇 개의 부분문자열로 분할합니다. 여기서 각 부분문자열은 ^ 문자로 구분됩니다.

str = ['Split ^this text into ^several pieces'];
expression = '\^';
splitStr = regexp(str,expression,'split')
splitStr = 1x3 cell
    {'Split '}    {'this text into '}    {'several pieces'}

정규 표현식에서 캐럿 기호에는 특별한 의미가 있으므로 이스케이프 문자인 백슬래시(\) 앞에 두십시오. 세미콜론과 같은 다른 구분 기호에서 문자형 벡터를 분할하기 위해 백슬래시를 포함할 필요는 없습니다.

'match' 키워드를 사용하여 정규 표현식과 일치하는 문자형 벡터 부분을 캡처하고, 'split' 키워드를 사용하여 일치하지 않는 남은 부분을 캡처합니다.

str = 'She sells sea shells by the seashore.';
expression = '[Ss]h.';
[match,noMatch] = regexp(str,expression,'match','split')
match = 1x3 cell
    {'She'}    {'she'}    {'sho'}

noMatch = 1x4 cell
    {0x0 char}    {' sells sea '}    {'lls by the sea'}    {'re.'}

정규 표현식 '[Ss]h.'는 다음을 지정합니다.

  • Ss가 첫 번째 문자입니다.

  • h가 두 번째 문자입니다.

  • 세 번째 문자에는 점(.)으로 지정한 대로 공백을 포함하여 모든 문자가 올 수 있습니다.

문자형 벡터에서 첫 번째(또는 마지막) 문자가 정규 표현식과 일치하면, 'split' 키워드의 처음(또는 마지막) 반환 값은 빈 문자형 벡터가 됩니다.

추가적으로, 부분문자열에서 원래 문자형 벡터를 다시 조합하십시오.

combinedStr = strjoin(noMatch,match)
combinedStr = 
'She sells sea shells by the seashore.'

정규 표현식 내에서 토큰을 정의하여 HTML 태그 이름을 찾습니다. 토큰은 괄호 ()로 나타냅니다.

str = '<title>My Title</title><p>Here is some text.</p>';
expression = '<(\w+).*>.*</\1>';
[tokens,matches] = regexp(str,expression,'tokens','match');

정규 표현식 <(\w+).*>.*</\1>은 다음과 같은 패턴을 지정합니다.

  • <(\w+)는 여는 꺾쇠괄호 다음에 하나 이상의 영숫자나 밑줄 문자가 오는 것을 찾습니다. 괄호에 묶인 \w+는 토큰에서 HTML 태그의 이름을 캡처합니다.

  • .*>은 HTML 특성 등의 추가 문자를 0개 이상 찾고, 닫는 꺾쇠 괄호를 찾습니다.

  • </\1>\1이 지정하는 대로 첫 번째 토큰에 대응하는 종료 태그를 찾습니다. 종료 태그의 형식은 </tagname>입니다.

토큰과 일치하는 부분문자열을 확인합니다.

celldisp(tokens)
 
tokens{1}{1} =
 
title
 
 
tokens{2}{1} =
 
p
 
celldisp(matches)
 
matches{1} =
 
<title>My Title</title>
 
 
matches{2} =
 
<p>Here is some text.</p>
 

mm/dd/yyyydd-mm-yyyy 형식으로 일 또는 월이 먼저 표시될 수 있도록 날짜를 구문 분석합니다. 각 날짜 부분을 식별하기 위해 명명된 토큰을 사용합니다.

str = '01/11/2000  20-02-2020  03/30/2000  16-04-2020';
expression = ['(?<month>\d+)/(?<day>\d+)/(?<year>\d+)|'...
              '(?<day>\d+)-(?<month>\d+)-(?<year>\d+)'];
tokenNames = regexp(str,expression,'names');

정규 표현식은 다음과 같은 패턴을 지정합니다.

  • (?<name>\d+)는 하나 이상의 숫자를 찾아 결과를 이름으로 표시된 토큰에 할당합니다.

  • |는 논리 or 연산자이며, 날짜에 2개의 패턴이 가능하다는 것을 나타냅니다. 첫 번째 패턴에서 슬래시(/)가 토큰을 분리합니다. 두 번째 패턴에서 하이픈(-)이 토큰을 분리합니다.

명명된 토큰을 확인합니다.

for k = 1:length(tokenNames)
   disp(tokenNames(k))
end
    month: '01'
      day: '11'
     year: '2000'

    month: '02'
      day: '20'
     year: '2020'

    month: '03'
      day: '30'
     year: '2000'

    month: '04'
      day: '16'
     year: '2020'

단어에서 대문자와 소문자를 모두 찾습니다.

기본적으로, regexp는 대/소문자를 구분하는 일치 작업을 수행합니다.

str = 'A character vector with UPPERCASE and lowercase text.';
expression = '\w*case';
matchStr = regexp(str,expression,'match')
matchStr = 1x1 cell array
    {'lowercase'}

정규 표현식은 다음과 같은 문자형 벡터를 지정합니다.

  • \w*의 의미대로, 0개 이상의 영숫자나 밑줄 문자로 시작합니다.

  • case라는 문자로 끝납니다.

regexpi 함수는 regexp와 동일한 구문을 사용하지만, 대/소문자를 구분하지 않는 일치 작업을 수행합니다.

matchWithRegexpi = regexpi(str,expression,'match')
matchWithRegexpi = 1x2 cell
    {'UPPERCASE'}    {'lowercase'}

또는 'ignorecase' 옵션을 사용하여 regexp에 대해 대/소문자를 구분하는 일치를 비활성화합니다.

matchWithIgnorecase = regexp(str,expression,'match','ignorecase')
matchWithIgnorecase = 1x2 cell
    {'UPPERCASE'}    {'lowercase'}

표현식이 여러 개인 경우 (?i) 검색 플래그를 사용하여, 선택한 표현식에 대해 대/소문자를 구분하는 일치를 비활성화합니다.

expression = {'(?-i)\w*case';...
              '(?i)\w*case'};
matchStr = regexp(str,expression,'match');
celldisp(matchStr)
 
matchStr{1}{1} =
 
lowercase
 
 
matchStr{2}{1} =
 
UPPERCASE
 
 
matchStr{2}{2} =
 
lowercase
 

새 줄(\n)이 포함된 문자형 벡터를 만들고 정규 표현식을 사용하여 구문 분석을 합니다. regexpmatchStr을 여러 라인 텍스트가 포함된 셀형 배열로 반환하기 때문에, 해당 텍스트를 셀형 배열에서 추출하여 모든 라인을 표시할 수 있습니다.

str = sprintf('abc\n de');
expression = '.*';
matchStr = regexp(str,expression,'match');
matchStr{:}
ans = 
    'abc
      de'

기본적으로 점(.)은 새 줄을 포함하여 모든 문자와 일치하고 원래 문자형 벡터와 같은 단일 일치 항목을 반환합니다.

'dotexceptnewline' 옵션을 사용하여 일치 항목에서 새 줄 문자를 제외합니다. 이렇게 하면 각 텍스트 라인에서 별도의 일치 항목을 반환합니다.

matchStrNoNewline = regexp(str,expression,'match','dotexceptnewline')
matchStrNoNewline = 1x2 cell
    {'abc'}    {' de'}

^이나 $ 메타문자 및 'lineanchors' 옵션을 사용하여 각 라인의 첫 번째 문자나 마지막 문자를 찾습니다.

expression = '.$';
lastInLine = regexp(str,expression,'match','lineanchors')
lastInLine = 1x2 cell
    {'c'}    {'e'}

텍스트에서 일치 항목을 찾고 출력값을 스칼라 셀로 반환합니다.

c로 시작하고, t로 끝나며, 그 사이에 하나 이상의 모음이 포함된 단어를 찾습니다. 시작 인덱스를 스칼라 셀로 반환합니다.

str = 'bat cat can car coat court CUT ct CAT-scan';
expression = 'c[aeiou]+t';
startIndex = regexp(str,expression,'forceCellOutput')
startIndex = 1x1 cell array
    {[5 17]}

숫자형 배열로 시작 인덱스에 액세스하기 위해 셀의 요소를 참조합니다.

startIndex{1}
ans = 1×2

     5    17

일치하는 부분문자열과 일치하지 않는 부분문자열을 반환합니다. 각 출력값은 자체 스칼라 셀 안에 있습니다.

[match,noMatch] = regexp(str,expression,'match','split','forceCellOutput')
match = 1x1 cell array
    {1x2 cell}

noMatch = 1x1 cell array
    {1x3 cell}

일치 항목의 배열에 액세스하려면 match의 요소를 참조하십시오.

match{1}
ans = 1x2 cell
    {'cat'}    {'coat'}

일치하지 않는 부분문자열에 액세스하려면 noMatch의 요소를 참조하십시오.

noMatch{1}
ans = 1x3 cell
    {'bat '}    {' can car '}    {' court CUT ct CAT-scan'}

입력 인수

모두 축소

입력 텍스트로, 문자형 벡터, 문자형 벡터로 구성된 셀형 배열, string형 배열 중 하나로 지정됩니다. 셀형 배열의 각 문자형 벡터나 string형 배열의 각 문자열은 길이에 제한이 없고 모든 문자를 포함할 수 있습니다.

strexpression이 string형 배열이나 셀형 배열인 경우, 동일한 차원을 가져야 합니다.

데이터형: string | char | cell

정규 표현식으로, 문자형 벡터, 문자형 벡터로 구성된 셀형 배열, string형 배열 중 하나로 지정됩니다. 각 표현식은 str에서 일치시킬 패턴을 지정하는 문자, 메타문자, 연산자, 토큰, 플래그를 포함할 수 있습니다.

다음 테이블은 정규 표현식의 요소를 설명합니다.

메타문자

메타문자는 문자, 문자 범위, 숫자 및 공백 문자를 나타냅니다. 메타문자를 사용하여 일반화된 문자 패턴을 생성할 수 있습니다.

메타문자

설명

.

임의의 단일 문자입니다(공백 포함).

'..ain''ain'으로 끝나는 5개의 연속된 문자 시퀀스와 일치합니다.

[c1c2c3]

대괄호 내에 포함된 임의의 문자입니다. $ | . * + ?- 문자는 범위를 나타내는 데 사용되지 않을 경우 문자 그대로 취급됩니다.

'[rp.]ain''rain', 'pain', '.ain'과 일치합니다.

[^c1c2c3]

대괄호 내에 포함되지 않은 임의의 문자입니다. $ | . * + ?- 문자는 범위를 나타내는 데 사용되지 않을 경우 문자 그대로 취급됩니다.

'[^*rp]ain''rain', 'pain', '*ain'을 제외하고 'ain'으로 끝나는 4개 문자로 구성된 모든 시퀀스와 일치합니다. 예를 들어, 'gain', 'lain', 'vain'과 일치합니다.

[c1-c2]

c1 ~ c2 범위의 임의의 문자입니다.

'[A-G]'A ~ G 범위의 단일 문자와 일치합니다.

\w

임의의 영문자, 숫자, 밑줄 문자 중 하나입니다. 영어 문자 집합의 경우 \w[a-zA-Z_0-9]와 동일합니다.

'\w*'는 영문자, 숫자 또는 밑줄 문자 그룹으로 구성된 단어를 식별합니다.

\W

영문자, 숫자, 밑줄이 아닌 임의의 문자입니다. 영어 문자 집합의 경우 \W[^a-zA-Z_0-9]와 동일합니다.

'\W*'는 영문자, 숫자 또는 밑줄 문자 그룹으로 구성된 단어가 아닌 용어를 식별합니다.

\s

임의의 공백 문자로 [ \f\n\r\t\v]와 동일합니다.

'\w*n\s'는 문자 n 다음에 공백 문자로 끝나는 단어와 일치합니다.

\S

공백이 아닌 임의의 문자로 [^ \f\n\r\t\v]와 동일합니다.

'\d\S'는 숫자 다음에 공백이 아닌 임의의 문자가 오는 단어와 일치합니다.

\d

임의의 숫자로 [0-9]와 동일합니다.

'\d*'는 임의 개수의 연속된 숫자와 일치합니다.

\D

숫자가 아닌 임의의 문자로 [^0-9]와 동일합니다.

'\w*\D\>'는 숫자로 끝나지 않는 단어와 일치합니다.

\oN 또는 \o{N}

8진수 값 N의 문자입니다.

'\o{40}'은 8진수 40으로 정의된 공백 문자와 일치합니다.

\xN 또는 \x{N}

16진수 값 N의 문자입니다.

'\x2C'는 16진수 2C로 정의된 쉼표 문자와 일치합니다.

문자 표현

연산자

설명

\a

경보(경고음)

\b

백스페이스

\f

폼 피드(FF)

\n

새 줄(Newline)

\r

캐리지 리턴

\t

가로 탭

\v

세로 탭

\char

정규 표현식에서 문자 그대로 일치시키려는 특수 의미를 갖는 임의의 문자(예를 들어, \\를 사용하여 단일 백슬래시와 일치시킴)

수량자

수량자는 패턴이 일치하는 텍스트에서 나타나야 하는 패턴의 횟수를 지정합니다.

수량자

표현식이 나타나는 횟수

expr*

연속 0회 이상입니다.

'\w*'는 임의 길이를 갖는 한 단어와 일치합니다.

expr?

0회 또는 1회입니다.

'\w*(\.m)?'는 선택적으로 확장자 .m으로 끝나는 단어와 일치합니다.

expr+

연속 1회 이상입니다.

'<img src="\w+\.gif">'는 파일 이름에 하나 이상의 문자가 포함된 경우 <img> HTML 태그와 일치합니다.

expr{m,n}

연속 m회 이상, n회 이하입니다.

{0,1}?와 동일합니다.

'\S{4,8}'은 공백이 아닌 4개 ~ 8개의 문자와 일치합니다.

expr{m,}

연속 m회 이상입니다.

{0,}{1,}는 각각 *+와 동일합니다.

'<a href="\w{1,}\.html">'은 파일 이름에 하나 이상의 문자가 포함된 경우 <a> HTML 태그와 일치합니다.

expr{n}

정확하게 연속 n회입니다.

{n,n}과 동일합니다.

'\d{4}'는 연속된 4개 숫자와 일치합니다.

수량자는 다음 표에 설명되어 있는 세 가지 모드로 나타날 수 있습니다. q는 이전 표에 나와 있는 수량자 중 하나를 나타냅니다.

모드

설명

exprq

최대 일치 표현식(Greedy Expression): 가능한 한 많은 문자와 일치시킵니다.

텍스트 '<tr><td><p>text</p></td>'가 주어진 경우, 표현식 '</?t.*>'<tr/td> 사이의 모든 문자와 일치합니다.

'<tr><td><p>text</p></td>'

exprq?

최소 일치 표현식(Lazy Expression): 필요한 최소한의 문자와 일치시킵니다.

텍스트 '<tr><td><p>text</p></td>'가 주어진 경우, 표현식 '</?t.*?>'는 닫는 꺾쇠 괄호(>)가 처음 나오는 부분에서 각 일치 작업을 종료합니다.

'<tr>' '<td>' '</td>'

exprq+

독점적 일치 표현식(Possessive Expression): 가능한 한 많이 일치시킵니다. 단, 텍스트의 일부를 다시 돌아가서 검색하지는 않습니다.

텍스트 '<tr><td><p>text</p></td>'가 주어진 경우, 표현식 '</?t.*+>'에서 .*를 사용하여 닫는 꺽쇠 괄호가 캡처되지만 되돌아가 다시 검색하지 않으므로 일치 항목을 반환하지 않습니다.

그룹화 연산자

그룹화 연산자를 사용하면 토큰을 캡처하거나, 하나의 연산자를 여러 요소에 적용하거나, 특정 그룹의 역추적을 비활성화할 수 있습니다.

그룹화 연산자

설명

(expr)

표현식의 요소를 그룹화하고 토큰을 캡처합니다.

'Joh?n\s(\w*)'는 이름이 John 또는 Jon인 모든 사람들의 성을 포함하는 토큰을 캡처합니다.

(?:expr)

그룹화를 수행하지만 토큰을 캡처하지는 않습니다.

'(?:[aeiou][^aeiou]){2}''anon'과 같이, 모음 다음에 자음(모음이 아님)이 오는 연속된 2개의 모음 패턴과 일치합니다.

그룹화를 사용하지 않을 경우, '[aeiou][^aeiou]{2}'는 모음 다음에 두 개의 자음이 오는 문자와 일치합니다.

(?>expr)

아토믹 단위로 그룹화합니다. 일치 작업을 완료하기 위해 그룹 내에서 역추적을 수행하지 않으며 토큰을 캡처하지 않습니다.

'A(?>.*)Z''AtoZ'와 일치하지 않습니다. 그러나 'A(?:.*)Z'는 일치합니다. 아토믹 그룹을 사용하는 경우, Z.*를 사용하여 캡처되며 다시 검색되지는 않습니다.

(expr1|expr2)

표현식 expr1 또는 표현식 expr2와 일치시킵니다.

expr1과 일치하는 항목이 있으면 expr2가 무시됩니다.

여는 괄호 다음에 ?: 또는 ?>를 포함시켜 토큰이 표시되지 않도록 하거나 아토믹 단위로 그룹화할 수 있습니다.

'(let|tel)\w+'는 이를 포함하는 단어와 일치하지만 let 또는 tel로 끝나지 않습니다.

앵커(Anchors)

표현식에 포함된 앵커는 입력 텍스트나 단어의 시작 또는 끝부분에 일치됩니다.

앵커(Anchor)

일치 항목

^expr

입력 텍스트의 시작 부분입니다.

'^M\w*'는 텍스트의 시작 부분이 M으로 시작하는 단어와 일치합니다.

expr$

입력 텍스트의 끝부분입니다.

'\w*m$'는 텍스트의 끝부분이 m으로 끝나는 단어와 일치합니다.

\<expr

단어의 시작 부분입니다.

'\<n\w*'n으로 시작하는 임의의 단어와 일치합니다.

expr\>

단어의 끝부분입니다.

'\w*e\>'e로 끝나는 임의의 단어와 일치합니다.

전후방 탐색 어설션(Lookaround Assertion)

전후방 탐색 어설션(Lookaround Assertion)은 찾으려는 일치 항목 바로 앞이나 뒤에 오는 패턴을 검색합니다. 검색 결과에 자신은 포함시키지 않습니다.

포인터는 현재 위치에 그대로 유지되며 test 표현식에 대응하는 문자는 캡처되거나 삭제되지 않습니다. 따라서, 전방 탐색 어설션은 겹치는 문자 그룹과 일치할 수 있습니다.

전후방 탐색 어설션

설명

expr(?=test)

test와 일치하는 문자를 전방 탐색합니다.

'\w*(?=ing)'는 뒤에 ing가 오는 용어와 일치합니다(예: 입력 텍스트 'Flying, not falling.'에서 'Fly''fall').

expr(?!test)

test와 일치하지 않는 문자를 전방으로 탐색합니다.

'i(?!ng)'는 뒤에 ng가 오지 않는 문자 i가 있는 경우와 일치합니다.

(?<=test)expr

test와 일치하는 문자를 후방으로 탐색합니다.

'(?<=re)\w*''re' 뒤에 오는 용어와 일치합니다(예: 입력 텍스트 'renew, reuse, recycle'에서 'new', 'use', 'cycle').

(?<!test)expr

test와 일치하지 않는 문자를 후방으로 탐색합니다.

'(?<!\d)(\d)(?!\d)'는 한 자리 숫자(앞이나 뒤에 다른 자릿수가 오지 않는 숫자)와 일치합니다.

표현식 앞에 전방 탐색 어설션(Lookahead Assertion)을 지정하는 경우 이 연산은 논리 AND와 일치합니다.

작업

설명

(?=test)expr

testexpr 모두와 일치시킵니다.

'(?=[a-z])[^aeiou]'는 자음과 일치합니다.

(?!test)expr

expr과는 일치시키지만 test와는 일치시키지 않습니다.

'(?![aeiou])[a-z]'는 자음과 일치합니다.

논리 연산자 및 조건 연산자

논리 연산자와 조건 연산자를 사용하여 특정 조건의 상태를 테스트한 후, 해당하는 경우 다음에 일치시킬 패턴을 확인하는 데 그 결과를 사용할 수 있습니다. 이러한 연산자는 논리 ORif 또는 if/else 조건을 지원합니다.

조건은 토큰, 전후방 탐색 연산자, (?@cmd) 형식의 동적 표현식 중 하나일 수 있습니다. 동적 표현식은 논리값이나 숫자형 값을 반환해야 합니다.

조건 연산자

설명

expr1|expr2

표현식 expr1 또는 표현식 expr2와 일치시킵니다.

expr1과 일치하는 항목이 있으면 expr2가 무시됩니다.

'(let|tel)\w+'let이나 tel로 시작하는 단어와 일치합니다.

(?(cond)expr)

조건 condtrue이면 expr과 일치시킵니다.

'(?(?@ispc)[A-Z]:\\)'는 Windows® 시스템에서 실행하는 경우 드라이브 이름(예: C:\)과 일치합니다.

(?(cond)expr1|expr2)

조건 condtrue이면 expr1과 일치시킵니다. 그렇지 않을 경우, expr2와 일치시킵니다.

'Mr(s?)\..*?(?(1)her|his) \w*'는 텍스트가 Mrs로 시작하는 경우 her를 포함하는 텍스트와 일치하고 텍스트가 Mr로 시작하는 경우 his를 포함하는 텍스트와 일치합니다.

토큰 연산자

토큰은 정규 표현식의 일부를 괄호로 묶어 정의하며 일치하는 텍스트의 일부분입니다. 텍스트에 포함된 순서대로 토큰(순서형 토큰)을 참조하거나 더욱 용이하게 코드를 유지 관리하고 읽기 편한 출력값을 생성하도록 토큰에 이름을 할당할 수 있습니다.

순서형 토큰 연산자

설명

(expr)

토큰에서 괄호 안의 표현식과 일치하는 문자를 캡처합니다.

'Joh?n\s(\w*)'는 이름이 John 또는 Jon인 모든 사람들의 성을 포함하는 토큰을 캡처합니다.

\N

N번째 토큰과 일치시킵니다.

'<(\w+).*>.*</\1>'은 HTML 태그에 대한 토큰을 캡처합니다(예: 텍스트 '<title>Some text</title>'에서 'title').

(?(N)expr1|expr2)

N번째 토큰이 검색되면 expr1과 일치시킵니다. 그렇지 않을 경우, expr2와 일치시킵니다.

'Mr(s?)\..*?(?(1)her|his) \w*'는 텍스트가 Mrs로 시작하는 경우 her를 포함하는 텍스트와 일치하고 텍스트가 Mr로 시작하는 경우 his를 포함하는 텍스트와 일치합니다.

명명된 토큰 연산자

설명

(?<name>expr)

명명된 토큰에서 괄호 안의 표현식과 일치하는 문자를 캡처합니다.

'(?<month>\d+)-(?<day>\d+)-(?<yr>\d+)'mm-dd-yy 형식의 입력 날짜에서 월, 일, 연에 대한 명명된 토큰을 생성합니다.

\k<name>

name이 참조하는 토큰과 일치시킵니다.

'<(?<tag>\w+).*>.*</\k<tag>>'는 HTML 태그에 대한 토큰을 캡처합니다(예: 텍스트 '<title>Some text</title>'에서 'title').

(?(name)expr1|expr2)

명명된 토큰이 검색되는 경우 expr1과 일치시킵니다. 그렇지 않을 경우, expr2와 일치시킵니다.

'Mr(?<sex>s?)\..*?(?(sex)her|his) \w*'는 텍스트가 Mrs로 시작하는 경우 her를 포함하는 텍스트와 일치하고 텍스트가 Mr로 시작하는 경우 his를 포함하는 텍스트와 일치합니다.

참고

표현식에 중첩 괄호가 있는 경우, MATLAB®은 가장 바깥쪽에 있는 괄호 세트에 대응하는 토큰을 캡처합니다. 예를 들어, 검색 패턴 '(and(y|rew))'가 주어진 경우 MATLAB은 'y' 또는 'rew'에 대한 토큰이 아니라 'andrew'에 대한 토큰을 생성합니다.

동적 정규 표현식

동적 표현식을 사용하면 MATLAB 명령 또는 정규 표현식을 실행하여 일치하는 텍스트를 확인할 수 있습니다.

동적 표현식을 묶는 괄호는 캡처 그룹을 생성하지 않습니다.

연산자

설명

(??expr)

expr을 구문 분석하고 일치 표현식에 결과 용어를 포함시킵니다.

구문 분석 시, expr은 완전하고 유효한 정규 표현식과 일치해야 합니다. 백슬래시 이스케이프 문자(\)를 사용하는 동적 표현식에는 두 개의 백슬래시가 필요합니다. 하나는 expr의 초기 구문 분석에 필요하며, 다른 하나는 완전한 일치에 필요합니다.

'^(\d+)((??\\w{$1}))'은 일치 항목의 시작 부분에서 숫자를 읽어 일치시킬 문자 수를 확인합니다. 동적 표현식은 결과로 검색되는 일치 항목이 토큰에 캡처되도록 두 번째 괄호 세트에 묶습니다. 예를 들어, '5XXXXX'에 일치시키는 경우 '5''XXXXX'를 토큰에 캡처합니다.

(??@cmd)

cmd로 나타낸 MATLAB 명령을 실행하고 명령에서 반환되는 출력값을 일치 표현식에 포함시킵니다.

'(.{2,}).?(??@fliplr($1))'은 최소 4개 문자 길이(예: 'abba')의 회문(Palindrome)을 찾습니다.

(?@cmd)

cmd로 나타낸 MATLAB 명령을 실행하지만, 명령에서 반환하는 모든 출력값을 무시합니다. (정규 표현식 진단에 유용합니다.)

'\w*?(\w)(?@disp($1))\1\w*'는 중복 문자(예: pp)를 포함하는 단어와 일치시키고 중간 결과를 표시합니다.

동적 표현식 내에 다음 연산자를 사용하여 대체 텍스트를 정의합니다.

대체 연산자

설명

$& 또는 $0

입력 텍스트에서 현재 일치 항목인 부분

$`

입력 텍스트에서 현재 일치 항목 앞에 오는 부분

$'

입력 텍스트에서 현재 일치 항목 다음에 오는 부분($'를 나타내려면 $''를 사용함)

$N

N번째 토큰

$<name>

명명된 토큰

${cmd}

MATLAB이 명령 cmd를 실행할 때 반환되는 출력값

설명

문자

설명

(?#comment)

정규 표현식에 주석을 삽입합니다. 입력값과 일치시킬 때 주석 텍스트는 무시됩니다.

'(?# Initial digit)\<\d\w+'는 주석을 포함하며 숫자로 시작하는 단어와 일치시킵니다.

검색 플래그

검색 플래그는 일치시키는 표현식의 동작을 수정합니다. 검색 플래그 대신 표현식에 option 입력 인수를 전달하여도 됩니다.

플래그

설명

(?-i)

문자의 대/소문자를 일치시킵니다(regexpregexprep의 경우 디폴트임).

(?i)

문자의 대/소문자를 일치시키지 않습니다(regexpi의 경우 디폴트임).

(?s)

임의의 문자를 포함하는 패턴에서 점(.)을 일치시킵니다(디폴트 값).

(?-s)

새 줄(Newline) 문자가 아닌 임의의 문자를 포함하는 패턴에서 점을 일치시킵니다.

(?-m)

텍스트의 시작 부분 및 끝부분에서 ^$ 메타문자를 일치시킵니다(디폴트 값).

(?m)

라인의 시작 부분과 끝부분에서 ^$ 메타문자를 일치시킵니다.

(?-x)

일치 작업을 수행할 때 공백 문자와 주석을 포함시킵니다(디폴트 값).

(?x)

일치 작업을 수행할 때 공백 문자와 주석을 무시합니다. 공백 문자 및 # 문자를 일치시키려면 '\ ''\#'을 사용하십시오.

플래그가 수정하는 표현식은 다음과 같이 괄호 다음에 나타나거나

(?i)\w*

다음과 같이 괄호 안에서 플래그가 콜론(:)으로 구분된 형태로 나타날 수 있습니다.

(?i:\w*)

두 번째 구문을 사용하면 더 큰 표현식의 일부분에 대한 동작을 변경할 수 있습니다.

데이터형: char | cell | string

반환할 출력값을 나타내는 키워드로, 다음 문자형 벡터 중 하나로 지정됩니다.

출력값 키워드

반환되는 값

'start'(디폴트 값)

모든 일치 항목의 시작 인덱스, startIndex

'end'

모든 일치 항목의 끝 인덱스, endIndex

'tokenExtents'

모든 토큰의 시작 인덱스와 끝 인덱스

'match'

expression의 패턴과 일치하는 각 부분문자열의 텍스트

'tokens'

str에서 캡처된 각 토큰의 텍스트

'names'

명명된 각 토큰의 이름과 텍스트

'split'

일치하지 않는 str 부분문자열의 텍스트

데이터형: char | string

검색 옵션으로, 문자형 벡터로 지정됩니다. 쌍을 이루는 옵션: 하나는 디폴트 동작에 대응하는 옵션이고 다른 하나는 디폴트 동작을 재정의할 수 있는 옵션입니다. 옵션 쌍에서 한 옵션만 지정하십시오. 옵션은 어떤 순서로 지정해도 좋습니다.

디폴트

재정의

설명

'all'

'once'

표현식을 가능한 많이 일치시키거나(디폴트 값) 한 번만 일치시킵니다.

'nowarnings'

'warnings'

경고를 표시하지 않거나(디폴트 값) 표시합니다.

'matchcase'

'ignorecase'

대/소문자를 일치시키거나(디폴트 값), 무시합니다.

'noemptymatch'

'emptymatch'

길이가 0인 일치를 무시하거나(디폴트 값), 포함시킵니다.

'dotall'

'dotexceptnewline'

점과 임의의 문자를 일치시키거나(디폴트 값), 새 줄(\n)을 제외한 문자와 일치시킵니다.

'stringanchors'

'lineanchors'

^$ 메타문자를 문자형 벡터의 시작과 끝에 적용하거나(디폴트 값), 라인의 시작과 끝에 적용합니다. 새 줄 문자(\n)는 라인의 끝을 지정합니다. 라인의 시작은 첫 번째 문자, 또는 새 줄 문자 바로 뒤에 오는 임의의 문자로 지정됩니다.

'literalspacing'

'freespacing'

일치 작업을 수행할 때 공백 문자와 주석을 포함시키거나(디폴트 값), 무시합니다. freespacing으로 공백 문자와 # 문자를 일치시키려면 '\ ''\#'을 사용하십시오.

데이터형: char | string

출력 인수

모두 축소

각 일치 항목의 시작 인덱스로, 다음과 같이 행 벡터나 셀형 배열로 반환됩니다.

  • strexpression이 둘 다 문자형 벡터이거나 둘 다 string형 스칼라인 경우 출력값은 행 벡터입니다(또는 일치 항목이 없는 경우 빈 배열임).

  • str이나 expression 중 하나가 문자형 벡터로 구성된 셀형 배열 또는 string형 배열이고, 나머지 인덱스가 문자형 벡터 또는 string형 스칼라이면 출력값은 행 벡터로 구성된 셀형 배열입니다. 출력 셀형 배열은 입력 배열과 동일한 차원을 가집니다.

  • strexpression이 모두 셀형 배열이거나 string형 배열인 경우, 동일한 차원을 가져야 합니다. 출력값도 동일한 차원의 셀형 배열이 됩니다.

각 일치 항목의 끝 인덱스로, 다음과 같이 행 벡터나 셀형 배열로 반환됩니다.

  • strexpression이 둘 다 문자형 벡터이거나 둘 다 string형 스칼라인 경우 출력값은 행 벡터입니다(또는 일치 항목이 없는 경우 빈 배열임).

  • str이나 expression 중 하나가 문자형 벡터로 구성된 셀형 배열 또는 string형 배열이고, 나머지 인덱스가 문자형 벡터 또는 string형 스칼라이면 출력값은 행 벡터로 구성된 셀형 배열입니다. 출력 셀형 배열은 입력 배열과 동일한 차원을 가집니다.

  • strexpression이 모두 셀형 배열이거나 string형 배열인 경우, 동일한 차원을 가져야 합니다. 출력값도 동일한 차원의 셀형 배열이 됩니다.

일치 항목에 대한 정보로, 숫자형, 셀형, string형, 구조체형 배열 중 하나로 반환됩니다. 출력값 정보는 다음과 같이 출력값 키워드(outkey)에 지정한 값에 따라 달라집니다.

출력값 키워드

출력값 설명

출력 유형과 차원

'start'

일치 항목의 시작 인덱스

'start''end'는 모두 다음과 같습니다.

  • strexpression이 둘 다 문자형 벡터이거나 둘 다 string형 스칼라인 경우 출력값은 행 벡터입니다(또는 일치 항목이 없는 경우 빈 배열임).

  • str이나 expression 중 하나가 문자형 벡터로 구성된 셀형 배열 또는 string형 배열이고, 나머지 인덱스가 문자형 벡터 또는 string형 스칼라이면 출력값은 행 벡터로 구성된 셀형 배열입니다. 출력 셀형 배열은 입력 배열과 동일한 차원을 가집니다.

  • strexpression이 모두 셀형 배열이거나 string형 배열인 경우, 동일한 차원을 가져야 합니다. 출력값도 동일한 차원의 셀형 배열이 됩니다.

'end'

일치 항목의 끝 인덱스

'tokenExtents'

모든 토큰의 시작 인덱스와 끝 인덱스

기본적으로 모든 일치 항목을 반환할 때 결과는 다음과 같습니다.

  • strexpression이 둘 다 문자형 벡터이거나 둘 다 string형 스칼라경우 출력값은 1×n 셀형 배열입니다. 여기서 n은 일치 항목 개수입니다. 각 셀은 인덱스로 구성된 m×2 숫자형 배열을 포함합니다. 여기서 m은 일치 항목에 있는 토큰 개수입니다.

  • str이나 expression이 문자형 벡터로 구성된 셀형 배열이거나 string형 배열인 경우 출력값은 입력값 셀형 배열과 동일한 차원의 셀형 배열입니다. 각 셀은 1×n 셀형 배열을 포함합니다. 여기서 각 셀은 m×2 숫자형 배열을 포함합니다.

  • strexpression이 모두 셀형 배열이거나 string형 배열인 경우, 동일한 차원을 가져야 합니다. 출력값도 동일한 차원의 셀형 배열이 됩니다.

하나의 일치 항목만 반환하기 위해 'once' 옵션을 지정하면 출력값은 m×2 숫자형 배열이 되거나 str 및/또는 expression과 차원이 동일한 셀형 배열이 됩니다.

특정 인덱스 N에서 토큰이 예상되었지만 찾을 수 없으면 MATLAB은 [N,N-1] 토큰에 대한 범위를 반환합니다.

'match'

expression의 패턴과 일치하는 각 부분문자열의 텍스트

기본적으로 모든 일치 항목을 반환할 때 결과는 다음과 같습니다.

  • strexpression이 모두 문자형 벡터이거나 string형 스칼라인 경우 출력값은 1×n 배열입니다. 여기서 n은 일치 항목 개수입니다.

    str이 문자형 벡터인 경우 출력값은 문자형 벡터로 구성된 셀형 배열입니다. str이 string형 스칼라인 경우 출력값은 string형 배열입니다.

  • str이나 expression 중 하나가 문자형 벡터로 구성된 셀형 배열 또는 string형 배열이고, 다른 하나가 문자형 벡터 또는 string형 스칼라이면 출력값은 배열인 인수와 동일한 차원의 셀형 배열입니다.

    str이 문자형 벡터이거나 문자형 벡터로 구성된 셀형 배열이면 출력값은 문자형 벡터로 구성된 셀형 배열입니다. str이 string형 배열인 경우 출력값은 각 셀에 string형 배열이 포함된 셀형 배열입니다.

  • strexpression이 모두 셀형 배열이거나 string형 배열인 경우, 동일한 차원을 가져야 합니다. 출력값도 동일한 차원의 셀형 배열이 됩니다.

    str이 문자형 벡터로 구성된 셀형 배열인 경우 출력값도 문자형 벡터로 구성된 셀형 배열이 됩니다. str이 string형 배열인 경우 출력값은 각 셀에 string형 배열이 포함된 셀형 배열입니다.

하나의 일치 항목만 반환하기 위해 'once' 옵션을 지정하면 출력값은 문자형 벡터나 string형 배열이 되거나 strexpression과 차원이 동일한 셀형 배열이 됩니다.

'tokens'

str에서 캡처된 각 토큰의 텍스트

기본적으로 모든 일치 항목을 반환할 때 결과는 다음과 같습니다.

  • strexpression이 둘 다 문자형 벡터이거나 둘 다 string형 스칼라경우 출력값은 1×n 셀형 배열입니다. 여기서 n은 일치 항목 개수입니다. 각 셀은 일치 항목으로 구성된 1×m 셀형 배열을 포함합니다. 여기서 m은 일치 항목에 있는 토큰 개수입니다.

    str이 문자형 벡터인 경우 출력값은 문자형 벡터로 구성된 셀형 배열입니다. str이 string형 배열인 경우 출력값은 각 셀에 string형 배열이 포함된 셀형 배열입니다.

  • str이나 expression 중 하나가 문자형 벡터로 구성된 셀형 배열 또는 string형 배열이고, 다른 하나가 문자형 벡터 또는 string형 스칼라이면 출력값은 배열인 인수와 동일한 차원의 셀형 배열입니다. 각 셀은 1×n 셀형 배열을 포함합니다. 여기서 각 셀은 1×m 배열을 포함합니다.

    str이 문자형 벡터이거나 문자형 벡터로 구성된 셀형 배열이면 각 셀은 1×m 셀형 배열을 포함합니다. str이 string형 배열이면 각 셀은 1×m string형 배열을 포함합니다.

  • strexpression이 모두 셀형 배열이거나 string형 배열인 경우, 동일한 차원을 가져야 합니다. 출력값도 동일한 차원의 셀형 배열이 됩니다.

    str이 문자형 벡터로 구성된 셀형 배열인 경우 출력값도 문자형 벡터로 구성된 셀형 배열이 됩니다. str이 string형 배열이면 출력값은 가장 안쪽에 있는 셀에 string형 배열이 포함된 셀형 배열입니다.

하나의 일치 항목만 반환하기 위해 'once' 옵션을 지정하면 출력값은 1×m string형 배열, 문자형 벡터로 구성된 셀형 배열, str 및/또는 expression과 차원이 동일한 셀형 배열 중 하나가 됩니다.

특정 인덱스에서 토큰이 예상되었지만 찾을 수 없으면 MATLAB은 토큰에 대해서는 빈 값을, 문자형 벡터에 대해서는 ''를, string형에 대해서는 ""를 반환합니다.

'names'

명명된 각 토큰의 이름과 텍스트

모든 일치 항목에 대하여 결과는 다음과 같습니다.

  • strexpression이 둘 다 문자형 벡터이거나 둘 다 string형 스칼라인 경우 출력값은 1×n 구조체형 배열입니다. 여기서 n은 일치 항목 개수입니다. 구조체의 필드 이름은 토큰 이름에 대응합니다.

  • str이나 expression이 문자형 벡터로 구성된 셀형 배열 또는 string형 배열이고, 다른 하나가 문자형 벡터 또는 string형 스칼라이면 출력값은 배열인 인수와 동일한 차원의 셀형 배열입니다. 각 셀은 1×n 구조체형 배열을 포함합니다.

  • strexpression이 모두 셀형 배열이거나 string형 배열인 경우, 동일한 차원을 가져야 합니다. 출력값도 동일한 차원의 셀형 배열이 됩니다.

'split'

일치하지 않는 str 부분문자열의 텍스트

모든 일치 항목에 대하여 결과는 다음과 같습니다.

  • strexpression이 둘 다 문자형 벡터이거나 둘 다 string형 스칼라인 경우 출력값은 1×n 배열입니다. 여기서 n은 불일치 항목 개수입니다.

    str이 문자형 벡터인 경우 출력값은 문자형 벡터로 구성된 셀형 배열입니다. str이 string형 스칼라인 경우 출력값은 string형 배열입니다.

  • str이나 expression 중 하나가 문자형 벡터로 구성된 셀형 배열 또는 string형 배열이고, 다른 하나가 문자형 벡터 또는 string형 스칼라이면 출력값은 입력 배열과 동일한 차원의 셀형 배열입니다. 각 셀은 문자형 벡터로 구성된 1×n 셀형 배열을 포함합니다.

    str이 문자형 벡터이거나 문자형 벡터로 구성된 셀형 배열이면 출력값은 문자형 벡터로 구성된 셀형 배열입니다. str이 string형 배열인 경우 출력값은 각 셀에 string형 배열이 포함된 셀형 배열입니다.

  • strexpression이 모두 셀형 배열인 경우, 동일한 차원을 가져야 합니다. 출력값도 동일한 차원의 셀형 배열이 됩니다.

    str이 문자형 벡터로 구성된 셀형 배열인 경우 출력값도 문자형 벡터로 구성된 셀형 배열이 됩니다. str이 string형 배열인 경우 출력값은 각 셀에 string형 배열이 포함된 셀형 배열입니다.

세부 정보

모두 축소

토큰

토큰은 일치하는 텍스트의 일부이며 정규 표현식 일부에 부합합니다. 토큰을 만들려면 정규 표현식의 일부를 괄호로 묶으십시오.

예를 들어, 아래 표현식은 형식이 dd-mmm-yyyy인 날짜를 찾는데, 일, 월, 년에 대한 토큰이 포함되어 있습니다.

str = 'Here is a date: 01-Apr-2020';
expression = '(\d+)-(\w+)-(\d+)';

mydate = regexp(str,expression,'tokens');
mydate{:}
ans =

  1×3 cell array

    {'01'}    {'Apr'}    {'2020'}

더 쉽게 식별할 수 있도록 토큰에 이름을 연결할 수 있습니다.

str = 'Here is a date: 01-Apr-2020';
expression = '(?<day>\d+)-(?<month>\w+)-(?<year>\d+)';

mydate = regexp(str,expression,'names')
mydate = 

  struct with fields:

      day: '01'
    month: 'Apr'
     year: '2020'

자세한 내용은 정규 표현식의 토큰 항목을 참조하십시오.

  • 텍스트 내에서 문자가 정확히 일치하는 항목을 찾으려면 contains 또는 strfind를 사용하십시오. 문자 패턴을 찾으려면 regexp를 사용하십시오.

알고리즘

MATLAB은 왼쪽에서 오른쪽으로 각 입력 문자형 벡터나 string형을 구문 분석하고, 정규 표현식의 첫 번째 요소와 문자형 벡터나 string형의 텍스트가 일치하는지 확인합니다. 이 과정에서 MATLAB은 일치하지 않는 모든 텍스트를 건너뜁니다.

MATLAB에서 처음 일치하는 항목을 찾으면 표현식의 두 번째 부분 등 이후 부분과 일치하는지 확인하기 위해 계속 구문 분석합니다.

확장 기능

버전 내역

R2006a 이전에 개발됨