본문 바로가기

MATLAB/ㄴ 기타

문자형과 string형 7. 패턴 표현식 작성하기

패턴텍스트를 검색하고 수정하는 데 도움이 되는 도구입니다.

정규 표현식과 유사하게 패턴은 텍스트에서 일치하는 부분을 찾기 위한 규칙을 정의합니다.

패턴을 containsmatchesextract와 같은 텍스트 검색 함수와 함께 사용하여

텍스트의 어느 부분에 이러한 함수가 작업을 수행할지 지정할 수 있습니다.

패턴 표현식은 패턴 함수, 연산자 및 리터럴 텍스트를 사용하여 수학 표현식과 유사한 방식으로

작성할 수 있습니다.

패턴 표현식을 작성하는 데는 제약이 없기 때문에 패턴이 상당히 복잡해질 수 있습니다.

패턴을 단계별로 작성하고 maskedPattern과 namedPattern 같은 함수를 사용하면 복잡한 패턴을

구조화하는 데 도움이 됩니다.

 


 

1) 간단한 패턴 작성하기

가장 간단한 패턴단일 패턴 함수로 작성됩니다.

예를 들어, lettersPattern영문자와 일치합니다.

다양한 유형의 문자와 텍스트의 다른 특징과 일치시키기 위한 많은 패턴 함수가 있습니다. 

 

패턴은 plus(+) 연산자를 사용하여 다른 패턴 및 리터럴 텍스트와 결합합니다.

이 연산자는 패턴 표현식에 정의된 순으로 패턴과 텍스트를 결합합니다.

결합된 패턴은 오직 동일한 순서의 텍스트와 일치합니다.

이 예제에서는 4개 문자로 된 문자열이 텍스트 끝에 있어야 하기 때문에

"YYYY/MM/DD"는 일치 항목이 아닙니다.

 

or ( | ) 연산자와 함께 사용된 패턴은 지정된 두 패턴 중 하나만 텍스트 섹션과 일치하면 됨을 명시합니다.

두 패턴 중 어느 것도 일치시킬 수 없다면 패턴 표현식은 일치하지 않는 것입니다.

 

일부 패턴 함수는 패턴을 입력으로 받아서 일정한 방식으로 그 패턴을 수정합니다.

예를 들어, optionalPattern은 가능한 경우 지정된 패턴이 일치하게 만들지만

성공적인 일치를 위해 이 패턴이 필수는 아닙니다.

 


 

2) 경계 패턴

경계 패턴은 특수한 유형의 패턴으로, 문자와 일치되는 대신에 지정된 문자 유형과 다른 문자들 간의 경계

또는 지정된 문자 유형과 해당 텍스트 조각의 시작이나 끝 간의 경계와 일치되는 패턴입니다.

 

예를 들어, digitBoundary는 문자 간의 경계 및 숫자 문자와 텍스트의 시작이나 끝 간의 경계와 일치합니다.

숫자 문자 자체와는 일치하지 않습니다. 경계 패턴은 split 같은 함수의 구분 기호로 유용합니다.

 

경계 패턴은 not( ~ ) 연산자를 사용하여 부정될 수 있기 때문에 패턴 중에서도 특별합니다.

경계 패턴은 이런 식으로 부정될 경우 위 요건을 충족하지 않은 문자 앞이나 뒤와 일치합니다.

예를 들어, ~digitBoundary는 다음 항목 사이의 경계와 일치합니다.
    1. 둘 다 숫자인 문자
    2. 둘 다 숫자가 아닌 문자
    3. 숫자가 아닌 문자와 텍스트 조각의 처음 또는 끝
replace를 사용하여 ~digitBoundary가 일치하는 위치" | " 문자로 표시합니다.

 


 

3) 복잡한 패턴을 단계별로 작성하기

때로는 간단한 패턴이 문제를 해결하기에 충분하지 않으며 더 복잡한 패턴이 필요합니다.

패턴 표현식이 길어지면서 일치하는 항목을 이해하기 어려워질 수 있습니다.

복잡한 패턴 작성을 간소화하는 한 가지 방법은 패턴의 각 부분을 별도로 작성한 다음

이를 하나의 패턴 표현식으로 조합하는 것입니다.

 

예를 들어, 이메일 주소는 local_part@domain.TLD 형식을 사용합니다.

세 개의 각 식별자(local_part, domain, TLD)는 숫자, 영문자, 밑줄 문자의 조합이어야 합니다.

전체 패턴을 작성하려면 식별자에 대한 패턴부터 정의하십시오.

alphanumericsPattern를 통해 하나의 영문자 또는 숫자 문자를,

하나의 밑줄 문자를 일치시키는 패턴을 " | " 문자를 통해 작성합니다.

 

이제 asManyOfPattern을 사용하여 한 개 이상의 identCharacters 연속 인스턴스와 일치되도록 합니다.

 

다음으로 여러 식별자가 포함된 이메일과 일치하는 패턴을 작성합니다.

 

다음 예제 이메일과 얼마나 잘 일치하는지 확인하여 패턴을 테스트합니다.

 

이메일이 모두 유효하지만 패턴은 예제 이메일 몇 개와 일치하지 못합니다.

local_part와 domain은 둘 다 마침표로 구분된 일련의 식별자로 구성될 수 있습니다. 

identifier 패턴을 사용하여 일련의 식별자와 일치할 수 있는 패턴을 작성합니다. 

asManyOfPattern은 지정된 패턴이 동시에 여러 번 나타나는 부분과 최대한 일치하지만,

지정된 패턴이 나타나지 않더라도 나머지 패턴은 여전히 성공적으로 일치할 수 있습니다.

 

이 패턴을 사용하여 모든 예제 이메일과 일치할 수 있는 새로운 emailPattern을 작성합니다.

 


 

4) 패턴 표시 구조화하기

복잡한 패턴은 경우에 따라 읽고 해석하기 어려울 수 있습니다.

패턴 구조에 익숙하지 않은 사람과 패턴을 공유할 경우 특히 그렇습니다.

 

예를 들어, emailPattern은 표시됐을 때 길고 읽기 어렵습니다.

 

표시와 관련된 문제 중 일부는 identifier 패턴이 많이 반복된다는 점입니다.

패턴 사용자에게 이 패턴의 정확한 세부 정보가 중요하지 않은 경우에는 maskedPattern을 사용하여 

identifier 패턴의 표시를 숨길 수 있습니다.

이 함수는 identifier의 표시가 마스킹되고 대신 변수 이름인 "identifier"가 표시되는 새 패턴을 생성합니다.

또는 다른 이름이 표시되도록 지정할 수 있습니다.

마스킹된 패턴의 세부 정보에 액세스하려면 표시된 패턴에서 "Show all details"를 클릭하면 됩니다.

 

namedPattern 함수를 사용하여 패턴을 한층 더 구조화할 수 있습니다. 

namedPattern은 패턴이 다른 패턴과 조합될 때 표시되는 방식을 변경하는 명명된 패턴으로 패턴을

지정합니다.

이메일 주소에는 몇 개의 중요한 부분이 있으며(local_part@domain.TLD) 각 부분마다 고유한 일치 규칙

있습니다.

각 부분에 대한 명명된 패턴을 만듭니다.

 

명명된 패턴은 패턴의 부분을 더 상세히 기술하기 위해 중첩될 수 있습니다.

명명된 패턴을 중첩하려면 명명된 패턴들을 사용하여 패턴을 작성한 다음 해당 패턴을 명명된 패턴으로

지정하십시오.

 

예를 들어, Domain.TLD는 도메인, 하위 도메인 및 최상위 도메인(TLD)으로 나눌 수 있습니다. 

domain.TLD의 각 부분에 대한 명명된 패턴을 만듭니다.

 

단일 명명된 패턴 domain 아래 domain의 구성요소에 대한 명명된 패턴을 중첩합니다.

 

패턴을 단일 명명된 패턴인 emailPattern으로 함께 조합합니다. 

emailPattern 표시에서 각 명명된 패턴, 패턴이 일치하는 항목과 더불어 중첩된 명명된 패턴에 대한 정보를

볼 수 있습니다.

 

패턴에 대해 점 인덱싱을 사용하여 명명된 패턴 및 중첩된 명명된 패턴에 액세스할 수 있습니다.

 

예를 들어, emailPattern에서 domain으로 점 인덱싱한 다음 subdomain으로 다시 점 인덱싱하여

중첩된 명명된 패턴 subdomain에 액세스할 수 있습니다.

 

나머지 패턴 표현식을 다시 작성할 필요 없이 점 표기법을 사용하여 명명된 패턴을 변경할 수 있습니다.

 


 

https://kr.mathworks.com/help/matlab/matlab_prog/build-pattern-expressions.html

 

패턴 표현식 작성하기 - MATLAB & Simulink - MathWorks 한국

이 예제의 수정된 버전이 있습니다. 사용자가 편집한 내용을 반영하여 이 예제를 여시겠습니까?

kr.mathworks.com