정규 표현식을 체계적으로 배우기: 기초 논문

저자:작은 꿈, 2017-03-29 10:52:47, 업데이트: 2020-11-18 12:39:53

정규 표현식을 체계적으로 배우기: 기초 논문

정형 표현식이란 무엇인가요? 정규표현은 미리 정의된 특정 문자와 그 특정 문자의 조합으로 문자열의 필터링 논리를 표현하기 위해 사용되는 규칙 문자열을 구성하는 것이다.

  • 정규 표현식을 통해 다음과 같은 목적을 달성할 수 있습니다.

    给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
    可以通过正则表达式,从字符串中获取我们想要的特定部分。
    

    더 쉽게 배울 수 있도록 Regextor를 추천합니다. Regextor는 정규 표현식을 검증하는 소프트웨어입니다.

    img

정규 표현의 다양한 규칙에 대해 설명하기 위해 아래를 시작하십시오:

  • 일반 텍스트 문자와 일치합니다

    정규 표현식은 일반 텍스트만을 포함해서 해당 텍스트를 정확하게 맞추는 것을 나타낼 수 있다. 예를 들어:

    정규 표현은:song문장:xiaosongge, xiaoSongge 엑시아오:song제, 샤오 송게 정규표현은 기본으로 대용어로 되어 있기 때문에 song는 일치하지 않습니다. 그러나 대부분의 정규표현 구현에서는 대용어로 표시할 수 있는 옵션을 제공합니다.

  • 임의의 문자를 매칭합니다

    .는 임의의 문자를 매칭하는 데 사용됩니다. 예를 들어:

    정규 표현식: c.t : :cat cet카아트 도그 분석: c.t는 "c 시작, t 끝"으로 매칭되며, 중간에는 임의의 문자 문자 문자이다.

    同理,多个连续的.可以匹配多个连续的任意字符:

    정형 표현식: c...t 매칭 결과: cat cetcaat

  • 특수 문자를 매칭합니다

    .는 정형 표현식에서 특별한 의미를 포함하고 있는 특수 문자이다..\는 특수 문자이기도 하며, 특수 문자들에 대한 변환 역할을 할 수 있다..

    정규 표현식: c.t 매칭 결과: catc.t개 참고: \는 특수 문자이기 때문에 실제 \의 문자를 맞추기 위해서는 두 개의 역 슬라이드를 사용해야 합니다:

    정규 표현식: c\t 일치 문자를 기다립니다:cat c\t dog 매칭 결과: catc\t

  • 문자 집합을 사용하세요

    위와 같이. 임의의 문자를 매칭할 수 있지만, 몇 개의 특정 문자를 매칭하고 싶다면 어떻게 될까요? 특정 문자의 집합을 매칭하는 데는 [와] 메타 문자를 사용할 수 있습니다.

    정규 표현식: c[ab]t : :cat cbt 분석: [ab]는 "a 또는?? b "와 일치한다. 따라서 c[ab]t는 cat cbt 을 일치시키지만 cet을 일치시키지 않는다.

  • 문자 그룹 간격을 사용하세요

    위의 예제에서, 만약 내가 cet를 맞추고 싶다면, [에]에 하나 더 넣을까? 그리고 내가 임의의 소문자를 맞추고 싶다면, 수십 개를 넣을까? 괜찮지만 너무 길어. 여기 우리는 [a-z]을 사용할 수 있습니다:

    정규 표현식: c[a-z]t 일치 중인 텍스트: cat cbt czt c2t : :cat cbt cztc2t 분석:c[a-z]t는 "c 시작, t"로 끝나는 것을 나타냅니다. 중간에는 "a" - "z"의 임의 한 글자가 있습니다.

    이 부분의 본문은 http://www.spotify.org/

    [0-9]와 [0123456789]의 기능과 동일합니다. [A-F] A부터 F까지의 대문자와 일치합니다. [A-Z] A부터 Z까지의 모든 대문자와 일치합니다. [a-z] a부터 z까지의 모든 소문자를 매칭합니다. [A-z]는 ASCII A부터 ASCII z까지의 모든 문자를 매칭한다 ((모든 문자를 매칭하는 것뿐만 아니라 ASCII 테이블의 A부터 z까지의 문자를 매칭하는 것, 예를 들어 [와 ^ 등) ᅳ) [A-Za-z0-9] 모든 대문자 및 숫자를 매칭합니다.

  • 비 문자 집합의 매칭

    문자 집합은 일반적으로 일치해야 할 문자 집합을 지정하는 데 사용됩니다. 그러나 때로는 당신이 일치하기를 원하지 않는 문자 집합을 배제하려는 경우도 있습니다. 이는 문자 집합에 대한 부정으로 이루어질 수 있습니다. 예를 들어:

    정형 표현식: c[^a-z]t 매칭 중인 텍스트: cat cbt czt c2t cAt 매칭 결과: cat cbt cztc2t cAt분석: 이것은 이전 예와 완전히 반대입니다. ▲[a-z]는 모든 소문자를 매칭하고, [^a-z]는 모든 소문자가 아닌 문자를 매칭합니다. ▲[a-z]는 모든 소문자를 매칭하고, [^a-z]는 모든 소문자가 아닌 문자를 매칭합니다. ▲[a-z]는 모든 소문자를 매칭합니다.

    참고로, ^ 문자는 문자 집합의 모든 문자를 비대칭하는 문자이다.

  • 메인 문자

    메타 문자는 정규 표현식에서 특별한 의미를 가지고 있으며, 앞서 몇 개의 메타 문자를 언급했듯이, 예를 들어.., [와].................

    모든 메타 문자에는 앞부분에 반斜선 변환을 추가할 수 있으며, 변환 후에는 특수한 의미를 대신하는 자와 일치합니다. 예를 들어,[이번을 일치시키는 "[:]"

    정규 표현식: a[b] 일치 중인 텍스트: a[b ab a[[b : :a[bab a[[b 참고: \는 변수역자를 사용해서 \도 메타자인 것을 의미합니다. 따라서 실제 \를 맞추어야 한다면 \를 사용할 수 있습니다.

    정규 표현식:a\b 매칭 문자를 기다립니다:a\b a\b a[[b 매칭 결과: a\ba\ba[[b

  • 빈 문자

    때로는 텍스트에서 인쇄할 수 없는 빈자를 맞추어야 할 수도 있습니다. 예를 들어, 모든 탭 문자, 또는 모든 교체 문자를 찾을 수 있기를 바랍니다. 아래 표의 특수 메타 문자를 사용할 수 있습니다.

    img

    예를 들어, \r\n는 Windows에서 파일 전환을 나타내는 역변선 조합과 일치합니다. 리눅스 및 유닉스 시스템에서는 \n만 사용해야 합니다.

  • 특정 문자 타입을 매칭합니다.

    일반적인 문자 집합을 맞추기 위해 사용할 수 있는 특별한 메타 문자가 있습니다. 이 메타 문자는 매칭 문자 클래스라고 불립니다. 사용이 편리하다는 것을 알게 될 것입니다.

    숫자를 맞추거나 숫자가 아닌 것 위에 언급한 바와 같이,[0-9]는 모든 숫자를 매칭할 수 있다. 만약 어떤 숫자를 매칭하고 싶지 않다면, [^0-9]를 사용할 수 있다. 다음 표는 숫자 및 비 숫자 클래스 메라 문자를 나열한다:

    img

    정규 표현식:c\dt 일치 중 텍스트: cat c2t czt c9t 매칭 결과: catc2tcztc9t

    정규 표현식: c\Dt 일치 중인 텍스트: cat c2t czt c9t : :catc2tcztc9t 알파벳 문자와 비알파벳 문자 또 다른 일반적인 클래스 메타 문자들은 \w와 \W입니다.

    img

    정규 표현식: c\wt 매칭 중인 텍스트: cat c2t czt c-t c\t : :cat c2tc-t c\ t

    정규 표현식: c\Wt 매칭 문자: cat c2t c-t c\t 매칭 결과: cat c2tc-t c\t공백과 비공백을 맞추기 마지막으로 만나게 될 매칭 클래스는 빈 클래스입니다.

    img

    정규 표현식: c\st 매칭 문자:cat c t c2t c\t 매칭 결과: catc tc2t c\ t

    정규 표현식: c\St 매칭 문자:cat c t c2t c\t : :catc tc2t c\t

  • 한 개 이상의 문자를 매칭합니다.

    + 메타 문자는 하나 이상의 문자를 매칭하는 것을 나타냅니다. 예를 들어, a는 "a"를 매칭하고, a+는 하나 이상의 "a"를 매칭합니다.

    정규 표현식: cat 일치 문자:ct cat caat caaat 매칭 결과:ctcat

    정규 표현식: ca+t 일치 문자:ct cat caat caaat 매칭 결과:ctcat caat caaat+를 문자 집합에 사용할 때 + 기호를 집합 바깥에 놓아야 합니다.

    정형 표현식: c[0-9]+t 일치 문자:ct c0t cat c123t 매칭 결과:ctc0t고양이c123t분석: c[0-9]+t는 "c와 시작, t와 끝, 중간에 하나 이상의 숫자가 있는 문자열"을 나타냅니다.

    물론, [0-9+]는 또한 합법적인 정규 표현식이지만 0 - 9 및 + 기호를 포함하는 문자 집합을 나타냅니다.

    일반적으로,.와 +와 같은 메타 문자는 문자 집합에서 문자 의미로 사용되므로 변환이 필요하지 않습니다. 그러나 변환을 수행하는 것이 좋습니다. 따라서,[0-9+]와 [0-9+]의 기능은 동일합니다.

    참고: +은 메타 문자이며, "+"를 맞추기 위해 +를 사용해야 합니다.

  • 0 또는 더 많은 문자를 매칭합니다.

    만약 0개 이상의 문자를 맞추고 싶다면 * 메타 문자를 사용할 수 있다.

    정규 표현식: ca*t 일치 중인 텍스트:ct cat caat cbt : :ct cat caatcbt 참고: (*) 기호는 메타 문자이다. "*"를 맞추기 위해서는 "*"를 변환해야 한다.

  • 0이나 1자를 맞추고

    ?는 0이나 한 문자를 매칭합니다. 그래서,?는 텍스트에서 선택적인 문자를 매칭하는 데 매우 적합합니다.

    정규 표현식: ca?t 일치 중인 텍스트:ct cat caat cbt : :ct catcaat cbt 참고:? 기호는 메타 문자이다.

  • 매칭 수를 사용합니다

    정규표현은 매칭을 지정하는 횟수를 허용한다. 횟수는 { } 사이에 지정될 수 있다. 참고: {와}는 메타 문자이기도 하며, 문자적 의미를 사용할 때 변환이 필요합니다.

    정확한 매칭 수 매치되는 횟수를 지정하려면 {와} 사이에 숫자를 입력할 수 있습니다. 예를 들어, {3}는 3번 전에 나타나는 문자 또는 집합을 매치합니다:

    정규 표현식: ca{3}t 일치 중 텍스트:ct cat caaat cbt 매칭 결과:ct catcaaatcbt 최소한 몇 번이나 우리는 또한 매칭의 최소값만을 지정할 수 있습니다. 예를 들어, {2,}는 2번 또는 더 많은 매칭을 의미합니다:

    정규 표현식: ca{1,}t 일치 중 텍스트:ct cat caaat cbt 매칭 결과:ctcat caaatcbt 분자 간격 매칭 우리는 또한 최소값과 최대값을 사용하여 일치의 수를 결정할 수 있습니다. 예를 들어, {2,3}는 최소 2번의 일치, 최대 3번의 일치를 의미합니다.

    정규 표현식: ca{2,3}t 일치 중 텍스트:ct cat caaat cbt 매칭 결과:ct catcaaatcbt 그래서? {0,1}와 같은 함수 +와 {1,}와 같은 함수입니다.

  • 탐욕이 없는 매칭

    예를 들어, 다음의 예를 들어보죠.

    정규 표현식: s.*g 짝짓기를 기다리고 있습니다. 짝짓기 결과: xiao song xiao song 분석: s.*g는 예상대로 두 개의 "song"을 매칭하는 것이 아니라 첫 번째 "s"와 마지막 "g" 사이의 모든 텍스트를 매칭합니다.

    이것은 *와 +가 탐욕적인 일치이기 때문입니다. 즉, 정규 표현식은 항상 최소가 아닌 최대 일치를 찾습니다. 이것은 의도적으로 설계되었습니다.

    그러나 탐욕스러운 일치가 원하지 않는 경우 이러한 측정 단어의 비 탐욕스러운 일치 (가능한 최소한의 문자를 맞추기) 를 사용하십시오.

    img

    그래요?이 문서는 Google의 비바람적인 버전이므로 *?를 사용하여 위의 예를 수정할 수 있습니다.

    正则表达式:s.?g 짝짓기를 기다리고 있습니다. 엑시아오:song시아오song 分析:可以看到s.?g는 두 개의 "Song"를 일치시킵니다.

  • 문자열 경계를 정의합니다

    문자열 경계와 일치하는 메타 문자는 ^와 $이며, 각각 문자열의 시작과 끝으로 사용됩니다.

    ^ 다음과 같이 쓰여집니다:

    정규 표현식:^xiao

    엑소송: : :xiao노래

    이글: Axiaosong 엑시아오송: 분석: ^xiao는 "xiao"로 시작하는 문자열과 일치합니다.

    $은 다음과 같이 쓰입니다.

    정식 표현: song$

    문장:xiaosong 엑시아오:song

    문장:xiaosonga 매칭 결과:xiaosonga 분석:'song$'가'song'로 끝나는 문자열과 일치합니다.

    공유자:

    정규 표현식:^[0-9a-zA-Z]{4,}$

    일치 중인 텍스트: a1b234ABC : :a1b234ABC

    +a1b23=4ABC 매칭 결과: +a1b23=4ABC 분석: ^[0-9a-zA-Z]{4,} $는 숫자 또는 글자로 구성된 매칭이며, 4자리보다 더 큰 숫자를 가진 문자열이다.

    참고:^는 집합의 시작에 있는 경우 부정; 집합의 외부에 있는 경우 문자열의 시작 위치에 일치한다. [^0-9]와 ^[0-9]의 차이를 시도할 수 있다.

  • 여러줄 모드를 사용

    그러나 (?m) 는 다줄 모드를 활성화할 수 있다. 다줄 모드에서는 정규표현 엔진이 바꾼 줄을 문자열의 분기자로, ^는 텍스트의 시작 또는 한 줄의 시작과 $는 텍스트의 끝 또는 한 줄의 끝과 일치할 수 있다.

    이 예제를 수정하면:

    정규 표현식: ((?m) ^ [0-9a-zA-Z]{4,} $

    일치 중인 텍스트: a1b234ABC a1b23=4ABC ABC123456

    : :a1b234ABC+a1b23=4ABCABC123456분석: ((?m) ^ [0-9a-zA-Z]{4,} $는 각 줄에 사용되는 숫자 또는 글자들로 구성된 것과 4자리보다 더 큰 숫자를 가진 문자열과 일치합니다.

    참고: 다줄 모드를 사용하는 경우, 정규 표현식의 시작에 ((?m) 를 배치해야 한다. (?m) 는 대부분의 정규 표현식 구현예에서 지원되지 않습니다. 일부 정규 표현식 구현예에서는 \A가 매칭 문자열의 시작과 \Z가 매칭 문자열의 끝을 사용하도록 지원합니다. 지원되는 경우, 이 메타 문자들의 기능은 ^와, $와 동일합니다. 그러나 이 메타 문자들은 ((?m) 변형을 사용할 수 없으며, 따라서 다줄 모드를 사용할 수 없습니다.

이 글은 기초를 설명하고 다음 글은 정규 표현식을 체계적으로 배우는 방법을 알려줍니다.

이 글은 iOS_Chosunko의 간행본에서 가져온 것입니다.


더 많은