Main Content

정규 표현식

여기에서는 정규 표현식의 정의 및 정규 표현식을 사용하여 텍스트를 검색하는 방법을 설명합니다. 정규 표현식은 유연하고 강력하지만 복잡한 구문을 사용합니다. 정규 표현식의 대안은 pattern(R2020b 이상)으로, 더 간단하게 정의하고 작성된 코드를 더 쉽게 읽을 수 있습니다. 자세한 내용은 패턴 표현식 작성하기 항목을 참조하십시오.

정규 표현식이란?

정규 표현식은 특정 패턴을 정의하는 일련의 문자입니다. 정규 표현식은 일반적으로 프로그램 입력값을 구문 분석하거나 텍스트 블록을 처리하는 등의 작업을 수행할 때 텍스트에서 패턴과 일치하는 단어 그룹을 검색하는 데 사용합니다.

문자형 벡터 'Joh?n\w*'은 정규 표현식의 한 예입니니다. 이 문자열은 문자 Jo로 시작하고, 그 다음에 선택적으로 문자 h('h?'로 표시)가 온 다음, 문자 n이 오고, 마지막으로 임의 개수의 단어 문자, 즉 영문자, 숫자, 밑줄 문자 중 하나('\w*'로 표시)로 끝나는 패턴을 정의합니다. 이 패턴은 다음 모두와 일치합니다.

Jon, John, Jonathan, Johnny

정규 표현식은 많은 양의 텍스트에서 텍스트 내의 특정 문자 서브셋을 검색할 수 있는 고유한 방법을 제공합니다. strfind와 같은 함수를 사용하여 정확히 일치하는 문자를 찾는 대신, 정규 표현식을 사용하면 특정 문자 패턴을 찾을 수 있습니다.

예를 들어, 미터법에 따라 속도를 표현하는 방법은 여러 가지가 있습니다.

km/h
km/hr
km/hour
kilometers/hour
kilometers per hour

검색 명령을 다섯 번 개별로 실행하여 텍스트에서 위의 용어를 찾을 수 있습니다.

strfind(text, 'km/h');
strfind(text, 'km/hour');
% etc.

그러나, 효율성을 높이기 위해 이러한 검색어 전체에 적용되는 하나의 구를 만들 수 있습니다.

Flow-chart describing logic of example regular expression.

이 구를 정규 표현식으로 변환하면(이 섹션 뒷부분에서 설명) 다음과 같이 됩니다.

pattern = 'k(ilo)?m(eters)?(/|\sper\s)h(r|our)?';

이제, 단일 명령을 사용하여 하나 이상의 용어를 찾을 수 있습니다.

text = ['The high-speed train traveled at 250 ', ...
   'kilometers per hour alongside the automobile ', ...
   'travelling at 120 km/h.'];
regexp(text, pattern, 'match')
ans =

  1×2 cell array

    {'kilometers per hour'}    {'km/h'}

정규 표현식을 사용하여 문자 검색 및 바꾸기를 지원하는 MATLAB® 함수는 네 가지가 있습니다. 처음 세 개는 받는 입력값과 반환하는 출력값이 유사합니다. 자세한 내용을 보려면 함수 도움말 페이지 링크를 클릭하십시오.

함수설명
regexp

정규 표현식과 일치시킵니다.

regexpi

대/소문자를 구분하지 않고 정규 표현식과 일치시킵니다.

regexprep

정규 표현식을 사용하여 텍스트의 일부를 바꿉니다.

regexptranslate

텍스트를 정규 표현식으로 변환합니다.

처음 세 개의 함수 중 하나를 호출할 경우 구문 분석되는 텍스트와 정규 표현식을 처음 두 개의 입력 인수로 전달해야 합니다. regexprep를 호출할 경우에는 대체 텍스트에 대한 패턴을 지정하는 표현식인 추가 입력값을 전달해야 합니다.

표현식 작성 단계

다음 세 단계에 따라 정규 표현식을 사용하여 텍스트에서 특정 용어를 검색할 수 있습니다.

  1. 문자열에서 고유 패턴 식별

    이 작업에는 검색하려는 텍스트를 동종 문자 유형의 그룹으로 분리하는 작업이 수반됩니다. 이러한 문자 유형은 일련의 소문자와 하나의 달러 기호 다음에 세 개의 숫자와 소수점 등으로 구성될 수 있습니다.

  2. 정규 표현식으로 개별 패턴 표현

    이 문서에서 설명하는 메타문자(Metacharater)와 연산자를 사용하여 검색 패턴의 개별 세그먼트를 정규 표현식으로 표현합니다. 그런 다음, 이러한 표현식 세그먼트를 검색에 사용할 단일 표현식으로 결합합니다.

  3. 적합한 검색 함수 호출

    구문 분석할 텍스트를 regexp 또는 regexpi와 같은 검색 함수 중 하나로 전달하거나 텍스트 대체 함수 regexprep로 전달합니다.

이 섹션에 나와 있는 예제에서는 5명의 친구로 구성된 그룹의 연락처 정보를 포함하는 레코드를 검색합니다. 이 정보에는 각 사람의 이름, 전화 번호, 거주지 및 이메일 주소가 포함됩니다. 텍스트에서 특정 정보를 추출하는 것이 목적입니다.

contacts = { ...
'Harry  287-625-7315  Columbus, OH  hparker@hmail.com'; ...
'Janice  529-882-1759  Fresno, CA  jan_stephens@horizon.net'; ...
'Mike  793-136-0975  Richmond, VA  sue_and_mike@hmail.net'; ...
'Nadine  648-427-9947  Tampa, FL  nadine_berry@horizon.net'; ...
'Jason  697-336-7728  Montrose, CO  jason_blake@mymail.com'};

이 예제의 첫 부분에서는 표준 이메일 주소의 형식을 나타내는 정규 표현식을 작성합니다. 그런 다음, 작성된 표현식을 사용하여 친구 그룹에서 특정 친구의 이메일 주소를 검색합니다. Janice의 연락처 정보는 contacts 셀형 배열의 2행에 있습니다.

contacts{2}
ans =

    'Janice  529-882-1759  Fresno, CA  jan_stephens@horizon.net'

1단계 — 텍스트에서 고유 패턴 식별

일반적인 이메일 주소는 표준 구성요소, 즉 사용자 계정 이름과 @ 기호, 사용자의 ISP(인터넷 서비스 공급자) 이름, 점(마침표), ISP가 속하는 도메인으로 구성됩니다. 아래 표의 왼쪽 열에는 이러한 구성요소가 나와 있으며, 오른쪽 열에는 각 구성요소의 일반적인 형식이 나와 있습니다.

고유한 이메일 주소 패턴각 패턴에 대한 일반적인 설명
계정 이름으로 시작합니다.
jan_stephens . . .
하나 이상의 소문자 및 밑줄
'@'을 추가합니다.
jan_stephens@ . . .
@ 기호
ISP를 추가합니다.
jan_stephens@horizon . . .
하나 이상의 소문자, 밑줄 없음
점(마침표)을 추가합니다.
jan_stephens@horizon. . . .
점(마침표) 문자
도메인으로 끝납니다.
jan_stephens@horizon.net
com 또는 net

2단계 — 정규 표현식으로 개별 패턴 표현

이 단계에서는 1단계에서 도출한 일반 형식을 정규 표현식의 세그먼트로 변환합니다. 그런 다음, 세그먼트들을 함께 합쳐 전체 표현식을 구성합니다.

아래 표의 왼쪽 열에는 개별 문자 패턴에 대해 일반화된 형식 설명이 나와 있습니다. (이 열의 내용은 1단계에 있는 표의 오른쪽 열에서 가져온 것입니다.) 두 번째 열에는 문자 패턴을 나타내는 연산자나 메타문자가 나와 있습니다.

각 세그먼트의 설명패턴
하나 이상의 소문자 및 밑줄[a-z_]+
@ 기호@
하나 이상의 소문자, 밑줄 없음[a-z]+
점(마침표) 문자\.
com 또는 net(com|net)

이러한 패턴을 하나의 문자형 벡터로 조합하면 완전한 표현식이 완성됩니다.

email = '[a-z_]+@[a-z]+\.(com|net)';

3단계 — 적합한 검색 함수 호출

이 단계에서는 2단계에서 도출한 정규 표현식을 사용하여 그룹에 속하는 특정 친구의 이메일 주소와 일치시킵니다. regexp 함수를 사용하여 검색을 수행합니다.

다음은 이 섹션의 앞부분에 나와 있는 연락처 정보 목록입니다. 각 개인의 레코드는 contacts 셀형 배열의 한 행을 차지합니다.

contacts = { ...
'Harry  287-625-7315  Columbus, OH  hparker@hmail.com'; ...
'Janice  529-882-1759  Fresno, CA  jan_stephens@horizon.net'; ...
'Mike  793-136-0975  Richmond, VA  sue_and_mike@hmail.net'; ...
'Nadine  648-427-9947  Tampa, FL  nadine_berry@horizon.net'; ...
'Jason  697-336-7728  Montrose, CO  jason_blake@mymail.com'};

다음은 2단계에서 도출된 대로 이메일 주소를 나타내는 정규 표현식입니다.

email = '[a-z_]+@[a-z]+\.(com|net)';

contacts 셀형 배열의 2행과 email 정규 표현식을 전달하여 regexp 함수를 호출합니다. 그러면 Janice의 이메일 주소가 반환됩니다.

regexp(contacts{2}, email, 'match')
ans =

  1×1 cell array

    {'jan_stephens@horizon.net'}

MATLAB은 마치 벡터를 "소비"하듯이 왼쪽에서 오른쪽으로 문자형 벡터를 구문 분석하며 진행합니다. 일치하는 문자가 발견될 경우 regexp는 그 위치를 기록한 후, 가장 최근에 일치했던 위치 바로 다음부터 문자형 벡터 구문 분석 작업을 재개합니다.

이번에는 목록의 다섯 번째 사람에 대해 동일한 호출을 수행합니다.

regexp(contacts{5}, email, 'match')
ans =

  1×1 cell array

    {'jason_blake@mymail.com'}

입력 인수로 제공된 셀형 배열 전체에서 목록에 있는 모든 사람의 이메일 주소를 검색할 수도 있습니다.

regexp(contacts, email, 'match');

연산자와 문자

정규 표현식은 다음 섹션에 설명된 대로 일치시킬 패턴을 지정하는 문자, 메타문자, 연산자, 토큰 및 플래그를 포함할 수 있습니다.

메타문자

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

메타문자

설명

.

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

'..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로 끝나지 않습니다.

앵커(Anchor)

표현식에 포함된 앵커는 문자형 벡터나 단어의 시작 또는 끝부분과 일치시킵니다.

앵커(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]'는 자음과 일치합니다.

자세한 내용은 정규 표현식의 전방 탐색 어설션(Lookahead Assertion) 항목을 참조하십시오.

논리 연산자 및 조건 연산자

논리 연산자와 조건 연산자를 사용하여 특정 조건의 상태를 테스트한 후, 해당하는 경우 다음에 일치시킬 패턴을 확인하는 데 그 결과를 사용할 수 있습니다. 이러한 연산자는 논리 ORif 또는 if/else 조건을 지원합니다. (AND 조건은 전후방 탐색 어설션(Lookaround Assertion) 항목을 참조하십시오.)

조건은 토큰, 전후방 탐색 어설션(Lookaround Assertion), (?@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 연산자를 사용하면 유지 관리하기 쉽도록 코드에 주석을 삽입할 수 있습니다. 입력 텍스트와 일치시킬 때 주석 텍스트는 MATLAB에 의해 무시됩니다.

문자

설명

(?#comment)

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

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

검색 플래그

검색 플래그는 일치시키는 표현식의 동작을 수정합니다.

플래그(flag)

설명

(?-i)

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

(?i)

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

(?s)

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

(?-s)

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

(?-m)

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

(?m)

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

(?-x)

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

(?x)

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

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

(?i)\w*

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

(?i:\w*)

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

참고 항목

| | | |

관련 항목