정형 표현식이란 무엇인가요? 정규표현은 미리 정의된 특정 문자와 그 특정 문자의 조합으로 문자열의 필터링 논리를 표현하기 위해 사용되는
규칙 문자열을 구성하는 것이다.
정규 표현식을 통해 다음과 같은 목적을 달성할 수 있습니다.
给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
可以通过正则表达式,从字符串中获取我们想要的特定部分。
더 쉽게 배울 수 있도록 Regextor를 추천합니다. Regextor는 정규 표현식을 검증하는 소프트웨어입니다.
정규 표현식은 일반 텍스트만을 포함해서 해당 텍스트를 정확하게 맞추는 것을 나타낼 수 있다. 예를 들어:
정규 표현은:song
문장:xiaosongge, xiaoSongge
엑시아오:song
제, 샤오 송게
정규표현은 기본으로 대용어로 되어 있기 때문에 song는 일치하지 않습니다. 그러나 대부분의 정규표현 구현에서는 대용어로 표시할 수 있는 옵션을 제공합니다.
.는 임의의 문자를 매칭하는 데 사용됩니다. 예를 들어:
정규 표현식: c.t
cat
cet
카아트 도그
분석: c.t는 "c
同理,多个连续的.可以匹配多个连续的任意字符:
정형 표현식: c...t
caat
개
.는 정형 표현식에서 특별한 의미를 포함하고 있는 특수 문자이다..\는 특수 문자이기도 하며, 특수 문자들에 대한 변환 역할을 할 수 있다..
정규 표현식: c.t
c.t
개
참고: \는 특수 문자이기 때문에 실제 \의 문자를 맞추기 위해서는 두 개의 역 슬라이드를 사용해야 합니다:
정규 표현식: c\t
일치 문자를 기다립니다:cat c\t dog
매칭 결과: catc\t
개
위와 같이. 임의의 문자를 매칭할 수 있지만, 몇 개의 특정 문자를 매칭하고 싶다면 어떻게 될까요? 특정 문자의 집합을 매칭하는 데는 [와] 메타 문자를 사용할 수 있습니다.
정규 표현식: c[ab]t
cat
cbt
위의 예제에서, 만약 내가 cet를 맞추고 싶다면, [에]에 하나 더 넣을까? 그리고 내가 임의의 소문자를 맞추고 싶다면, 수십 개를 넣을까? 괜찮지만 너무 길어. 여기 우리는 [a-z]을 사용할 수 있습니다:
정규 표현식: c[a-z]t
일치 중인 텍스트: cat cbt czt c2t
cat
cbt
czt
c2t
분석:c[a-z]t는 "c
이 부분의 본문은 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[b
ab a[[b
참고: \는 변수역자를 사용해서 \도 메타자인 것을 의미합니다. 따라서 실제 \를 맞추어야 한다면 \를 사용할 수 있습니다.
정규 표현식:a\b
매칭 문자를 기다립니다:a\b a\b a[[b
매칭 결과: a\ba\b
a[[b
때로는 텍스트에서 인쇄할 수 없는 빈자를 맞추어야 할 수도 있습니다. 예를 들어, 모든 탭 문자, 또는 모든 교체 문자를 찾을 수 있기를 바랍니다. 아래 표의 특수 메타 문자를 사용할 수 있습니다.
예를 들어, \r\n는 Windows에서 파일 전환을 나타내는 역변선 조합과 일치합니다. 리눅스 및 유닉스 시스템에서는 \n만 사용해야 합니다.
일반적인 문자 집합을 맞추기 위해 사용할 수 있는 특별한 메타 문자가 있습니다. 이 메타 문자는 매칭 문자 클래스라고 불립니다. 사용이 편리하다는 것을 알게 될 것입니다.
숫자를 맞추거나 숫자가 아닌 것 위에 언급한 바와 같이,[0-9]는 모든 숫자를 매칭할 수 있다. 만약 어떤 숫자를 매칭하고 싶지 않다면, [^0-9]를 사용할 수 있다. 다음 표는 숫자 및 비 숫자 클래스 메라 문자를 나열한다:
정규 표현식:c\dt
일치 중 텍스트: cat c2t czt c9t
매칭 결과: catc2t
cztc9t
정규 표현식: c\Dt
일치 중인 텍스트: cat c2t czt c9t
cat
c2tczt
c9t
알파벳 문자와 비알파벳 문자
또 다른 일반적인 클래스 메타 문자들은 \w와 \W입니다.
정규 표현식: c\wt
매칭 중인 텍스트: cat c2t czt c-t c\t
cat
c2t
c-t c\ t
정규 표현식: c\Wt
매칭 문자: cat c2t c-t c\t
매칭 결과: cat c2tc-t
c\t
공백과 비공백을 맞추기
마지막으로 만나게 될 매칭 클래스는 빈 클래스입니다.
정규 표현식: c\st
매칭 문자:cat c t c2t c\t
매칭 결과: catc t
c2t c\ t
정규 표현식: c\St
매칭 문자:cat c t c2t c\t
cat
c 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개 이상의 문자를 맞추고 싶다면 * 메타 문자를 사용할 수 있다.
정규 표현식: ca*t
일치 중인 텍스트:ct cat caat cbt
ct
cat
caat
cbt
참고: (*) 기호는 메타 문자이다. "*"를 맞추기 위해서는 "*"를 변환해야 한다.
?는 0이나 한 문자를 매칭합니다. 그래서,?는 텍스트에서 선택적인 문자를 매칭하는 데 매우 적합합니다.
정규 표현식: ca?t
일치 중인 텍스트:ct cat caat cbt
ct
cat
caat cbt
참고:? 기호는 메타 문자이다.
정규표현은 매칭을 지정하는 횟수를 허용한다. 횟수는
정확한 매칭 수 매치되는 횟수를 지정하려면 {와} 사이에 숫자를 입력할 수 있습니다. 예를 들어, {3}는 3번 전에 나타나는 문자 또는 집합을 매치합니다:
정규 표현식: ca{3}t
일치 중 텍스트:ct cat caaat cbt
매칭 결과:ct catcaaat
cbt
최소한 몇 번이나
우리는 또한 매칭의 최소값만을 지정할 수 있습니다. 예를 들어, {2,}는 2번 또는 더 많은 매칭을 의미합니다:
정규 표현식: ca{1,}t
일치 중 텍스트:ct cat caaat cbt
매칭 결과:ctcat
caaat
cbt
분자 간격 매칭
우리는 또한 최소값과 최대값을 사용하여 일치의 수를 결정할 수 있습니다. 예를 들어, {2,3}는 최소 2번의 일치, 최대 3번의 일치를 의미합니다.
정규 표현식: ca{2,3}t
일치 중 텍스트:ct cat caaat cbt
매칭 결과:ct catcaaat
cbt
그래서? {0,1}와 같은 함수 +와 {1,}와 같은 함수입니다.
예를 들어, 다음의 예를 들어보죠.
정규 표현식: s.*g 짝짓기를 기다리고 있습니다. 짝짓기 결과: xiao song xiao song 분석: s.*g는 예상대로 두 개의 "song"을 매칭하는 것이 아니라 첫 번째 "s"와 마지막 "g" 사이의 모든 텍스트를 매칭합니다.
이것은 *와 +가 탐욕적인 일치이기 때문입니다. 즉, 정규 표현식은 항상 최소가 아닌 최대 일치를 찾습니다. 이것은 의도적으로 설계되었습니다.
그러나 탐욕스러운 일치가 원하지 않는 경우 이러한 측정 단어의 비 탐욕스러운 일치 (가능한 최소한의 문자를 맞추기) 를 사용하십시오.
그래요?이 문서는 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의 간행본에서 가져온 것입니다.