정규식 언어

# 학습 과정 소개

정규식은 입력 텍스트에서 찾으려는 패턴을 의미합니다. 본 과정에서는 정규식을 정의할 때 사용할 수 있는 특정 범주의 문자, 연산자 및 구분을 안내합니다.

# 문자 클래스

문자 클래스(Character Classes)는 문자 집합 중 하나를 찾습니다.

[{"문자 클래스":"[character_group]","설명":"character_group 내의 모든 단일 문자와 일치하는 항목을 찾습니다. 기본적으로 대\/소문자를 구분합니다.","무늬":"[ae]","일치 항목":"\"gray\"의 \"a\" \"lane\"의 \"a\", \"e\""},{"문자 클래스":"[^character_group]","설명":"character_group내의 모든 단일 문자와 일치하지 않는 항목을 찾습니다. 기본적으로 대\/소문자를 구분합니다.","무늬":"[^aei]","일치 항목":"\"reign\"의 \"r\", \"g\", \"n\""},{"문자 클래스":"[첫 번째-마지막]","설명":"첫 번째~마지막 범위의 모든 단일 문자와 일치하는 항목을 찾습니다.","무늬":"[A-Z]","일치 항목":"\"AB123\"의 \"A\", \"B\""},{"문자 클래스":".","설명":"\\\n를 제외한 모든 단일 문자와 일치하는 항목을 찾습니다.리터럴 마침표 문자(또는 \\\u002E)를 찾으려면 앞에 이스케이프 문자(\\\\.)를 지정해야 합니다.","무늬":"a.e","일치 항목":"\"nave\"의 \"ave\"\"water\"의 \"ate\""},{"문자 클래스":"\\\\\\\p{이름}","설명":"유니코드 일반 범주 또는 이름으로 지정된, 명명된 블록의 모든 단일 문자와 일치하는 항목을 찾습니다.","무늬":"\\\\\\\p{Lu}\\\\\\\p{IsCyrillic}","일치 항목":"\"City Lights\"의 \"C\", \"L\"\"ДЖem\"의 \"Д\", \"Ж\""},{"문자 클래스":"\\\\\\\P{이름}","설명":"유니코드 일반 범주 또는 이름으로 지정된, 명명된 블록의 모든 단일 문자와 일치하지 않는 항목을 찾습니다.","무늬":"\\\\\\\P{Lu}\\\\\\\P{IsCyrillic}","일치 항목":"\"City\"의 \"i\", \"t\", \"y\"\"ДЖem\"의 \"e\", \"m\""},{"문자 클래스":"\\\\\\\w","설명":"단어 문자를 찾습니다.","무늬":"\\\\\\\w","일치 항목":"\"ID A1.3\"의 \"I\", \"D\", \"A\", \"1\", \"3\""},{"문자 클래스":"\\\\\\\W","설명":"단어가 아닌 문자를 찾습니다.","무늬":"\\\\\\\W","일치 항목":"\"ID A1.3\"의 \" \", \".\""},{"문자 클래스":"\\\\\\\s","설명":"공백 문자를 찾습니다.","무늬":"\\\\\\\w\\\\\\\s","일치 항목":"\"ID A1.3\" 내 \"D \""},{"문자 클래스":"\\\\\\\S","설명":"공백이 아닌 문자를 찾습니다.","무늬":"\\\\\\\s\\\\\\\S","일치 항목":"\"int __ctr\" 내 \" _\""},{"문자 클래스":"\\\\\\\d","설명":"10진수를 찾습니다.","무늬":"\\\\\\\d","일치 항목":"\"4 = IV\" 내 \"4\""},{"문자 클래스":"\\\\\\\D","설명":"10진수 이외의 문자와 일치합니다.","무늬":"\\\\\\\D","일치 항목":"\"4 = IV\"의 \" \", \"=\", \" \", \"I\", \"V\""}]

# 문자 이스케이프

문자 이스케이프(Character Escapes)는 정규식의 백슬래시 문자(\\) 뒤에 오는 문자가 아래 표와 같이 특수 문자나 리터럴로 해석되어야 함을 뜻합니다.

[{"이스케이프된 문자":"\\\t","설명":"탭 문자인 \\\u0009를 찾습니다.","무늬":"(\\\\\\\w+)\\\t","일치 항목":"\"item1\\\titem2\\\t\"의 \"item1\\\t\", \"item2\\\t\""},{"이스케이프된 문자":"\\\r","설명":"캐리지 리턴 문자인 \\\u000D를 찾습니다. (\\\r은 줄 바꿈 문자인 \\\n과 다릅니다.)","무늬":"\\\r\\\n(\\\\\\\w+)","일치 항목":"\"\\\r\\\nThese are\\\ntwo lines.\"의 \"\\\r\\\nThese\""},{"이스케이프된 문자":"\\\v","설명":"세로 탭 문자인 \\\u000B를 찾습니다.","무늬":"[\\\v]{2,}","일치 항목":"\"\\\v\\\v\\\v\"의 \"\\\v\\\v\\\v\""},{"이스케이프된 문자":"\\\n","설명":"줄 바꿈 문자인 \\\u000A를 찾습니다.","무늬":"\\\r\\\n(\\\\\\\w+)","일치 항목":"\"\\\r\\\nThese are\\\ntwo lines.\"의 \"\\\r\\\nThese\""},{"이스케이프된 문자":"\\\\\\\Nnn","설명":"8진수 표현을 사용하여 문자를 지정합니다. (nnn은 두 자리 또는 세 자리로 구성됩니다.)","무늬":"\\\\\\\w\\\\\\\040\\\\\\\w","일치 항목":"\"a bc d\"의 \"a b\", \"c d\""},{"이스케이프된 문자":"\\\\\\\xNn","설명":"16진수 표현을 사용하여 문자를 지정합니다. (nn은 정확히 두 자리로 구성됩니다.)","무늬":"\\\\\\\w\\\\\\\x20\\\\\\\w","일치 항목":"\"a bc d\"의 \"a b\", \"c d\""},{"이스케이프된 문자":"\\\\\\\uNnnn","설명":"16진수 표현(정확히 네 자리로 구성되는 nnnn)을 사용하여 유니코드 문자를 찾습니다.","무늬":"\\\\\\\w\\\\\\\u0020\\\\\\\w","일치 항목":"\"a bc d\"의 \"a b\", \"c d\""},{"이스케이프된 문자":"\\\\\\\","설명":"이 표나 이 항목의 다른 표에 있는 이스케이프된 문자로 인식되지 않는 문자가 뒤에 나올 경우 이 문자를 찾습니다. 예를 들어, \\\\*는 \\\x2A와 같고 \\\\.는 \\\x2E와 같습니다. 이를 통해 정규식 엔진은 * 또는 ?와 같은 언어 요소와 \\\\* 또는 \\\?로 표현되는 문자 리터럴을 구분합니다.","무늬":"\\\\\\\d+[\\\\\\\\+-x\\\\\\\\*]\\\\\\\d+","일치 항목":"\"(2+2) * 3*9\"의 \"2+2\" 및 \"3*9\""}]

# 앵커

앵커(Anchors) 또는 너비가 0인 원자적 어설션(atomic zero-width assertions)은 문자열에서 일치 항목을 찾는 위치를 지정합니다. 앵커를 사용하면 정규식 엔진은 문자열을 통과하거나 문자를 사용하지 않고 지정된 위치에서만 일치 항목을 검색합니다. 예를 들어 `^` 기호는 줄이나 문자열의 시작 부분에서 일치 항목을 찾도록 합니다. `^http:`는 줄의 시작 부분에서만 "http:"를 찾습니다.

[{"앵커":"^","설명":"문자열의 시작 부분에서 일치 항목을 찾습니다. 문자열이 여러 줄이라면 줄의 시작 부분에서 일치 항목을 찾습니다.","무늬":"^\\\\\\\d{3}","일치 항목":"\"901-333-\"의 \"901\""},{"앵커":"$","설명":"문자열의 끝부분 또는 문자열의 끝부분 \\\n 앞에서 일치 항목을 찾습니다. 문자열이 여러 줄이라면 줄의 끝부분 또는 줄의 끝 \\\n 앞에서 일치 항목을 찾습니다.","무늬":"-\\\\\\\d{3}$","일치 항목":"\"-901-333\"의 \"-333\""},{"앵커":"\\\\\\\A","설명":"일치 항목이 문자열의 시작 부분에만 있어야 합니다. (여러 줄을 지원하지 않음)","무늬":"\\\\\\\A\\\\\\\d{3}","일치 항목":"\"901-333-\"의 \"901\""},{"앵커":"\\\\\\\Z","설명":"일치 항목이 문자열의 끝이나 문자열의 끝에 있는 \\\n 앞에 있어야 합니다.","무늬":"-\\\\\\\d{3}\\\\\\\Z","일치 항목":"\"-901-333\"의 \"-333\""},{"앵커":"\\\\\\\z","설명":"일치 항목이 문자열의 끝 부분에만 있어야 합니다.","무늬":"-\\\\\\\d{3}\\\\\\\z","일치 항목":"\"-901-333\"의 \"-333\""},{"앵커":"\\\\\\\G","설명":"이전 일치가 종료된 지점에서 일치 항목을 찾습니다. 이전 일치 항목이 없다면 일치가 시작된 문자열의 위치에서 일치 항목을 찾습니다.","무늬":"\\\\\\\G\\\\\\\\(\\\\\\\d\\\\\\\\)","일치 항목":"\"(1)(3)(5)[7](9)\"의 \"(1)\", \"(3)\", \"(5)\""},{"앵커":"\\\\\\\b","설명":"단어 문자 \\\w와 비단어 문자 \\\W의 경계에서 일치 항목을 찾습니다.","무늬":"\\\\\\\b\\\\\\\w+\\\\\\\s\\\\\\\w+\\\\\\\b","일치 항목":"\"them theme them them\"의 \"them theme\", \"them them\""},{"앵커":"\\\\\\\B","설명":"단어 경계에서 일치 항목을 찾지 않도록 지정합니다. \\\\\\\b 앵커와 반대 작업을 수행합니다.","무늬":"\\\\\\\Bend\\\\\\\w*\\\\\\\b","일치 항목":"\"end sends endure lender\"의 \"ends\", \"ender\""}]

# 그룹화 구문

그룹화 구문(Grouping constructs)은 정규식의 하위 식(subexpression)을 나타내며 입력 문자열의 부분 문자열을 캡처합니다.

[{"그룹화 구문":"(하위 식)","설명":"일치하는 하위 식을 캡처하고 서수(2부터 시작)를 할당합니다.","무늬":"(\\\\\\\w)","일치 항목":"\"deep\"의 \"d\",\"e\", \"e\", \"p\""},{"그룹화 구문":"(?<이름>하위 식) 또는 (?'이름'하위 식)","설명":"일치하는 하위 식을 명령된 그룹에 캡처합니다.","무늬":"(?\\\\\\\w)\\\\\\\k<\/double><\/double>","일치 항목":"\"deep\"의 \"ee\""},{"그룹화 구문":"(?<이름1-이름2>하위 식) 또는 (?'이름1-이름2'하위 식)","설명":"균형 조정 그룹을 정의합니다. 그룹화 구문의 형식에서 이름1은 현재 그룹이고(선택 사항), 이름2는 이전에 정의된 그룹이며, 하위 식은 임의의 유효한 정규식 패턴입니다. 균형 조정 그룹 정의는 이름2의 정의를 삭제하고 이름1에 이름2와 이름1간의 간격을 저장합니다.","무늬":"(((?'Open'\\\\\\\\()[^\\\\\\\\(\\\\\\\\)]*)+((?'Close-Open'\\\\\\\\))[^\\\\\\\\(\\\\\\\\)]*)+)*(?(Open)(?!))$","일치 항목":"\"3+2^((1-3)*(3-1))\"의 \"((1-3)*(3-1))\""},{"그룹화 구문":"(?:하위 식)","설명":"비캡처 그룹을 정의합니다.","무늬":"Write(?:Line)?","일치 항목":"\"Console.WriteLine()\"의 \"WriteLine\"\"Console.Write(value)\"의 \"Write\""},{"그룹화 구문":"(?=하위 식)","설명":"Positive Lookahead하위 식 앞에 일치하는 패턴을 찾습니다.","무늬":"\\\\\\\b\\\\\\\w+\\\\\\\b(?=.+and.+)","일치 항목":"\"cats, dogs and some mice.\"의 \"cats\", \"dogs\""},{"그룹화 구문":"(?!하위 식)","설명":"Negative Lookahead하위 식 앞에 일치하지 않는 패턴을 찾습니다.","무늬":"\\\b\\\w+\\\b(?!.+and.+)","일치 항목":"\"cats, dogs and some mice.\"의 \"and\", \"some\", \"mice\""},{"그룹화 구문":"(?<=하위 식)","설명":"Positive Lookbehind하위 식 뒤에 일치하는 패턴을 찾습니다.","무늬":"\\\\\\\b\\\\\\\w+\\\\\\\b(?<=.+and.+)———————————\\\\\\\b\\\\\\\w+\\\\\\\b(?<=.+and.*)","일치 항목":"\"cats, dogs and some mice.\"의 \"some\", \"mice\"————————————\"cats, dogs and some mice.\"의 \"and\", \"some\", \"mice\""},{"그룹화 구문":"(?하위 식)","설명":"Negative Lookbehind하위 식 뒤에 일치하지 않는 패턴을 찾습니다.","무늬":"\\\\\\\b\\\\\\\w+\\\\\\\b(?———————————\\\\\\\b\\\\\\\w+\\\\\\\b(?","일치 항목":"\"cats, dogs and some mice.\"의 \"cats\", \"dogs\", \"and\"————————————\"cats, dogs and some mice.\"의 \"cats\", \"dogs\""},{"그룹화 구문":"(?>하위 식)","설명":"원자성 그룹(Atomic group)입니다.","무늬":"(?>a|ab)c","일치 항목":"\"ac\" 에서 \"ac\"\"abc\"에는 없음"}]

# 수량자

수량자(Quantifiers)는 일치 항목의 입력에 있어야 하는 문자, 그룹 또는 문자 클래스의 인스턴스 수를 지정합니다.

[{"수량자":"*","설명":"이전 요소를 0개 이상 찾습니다.","무늬":"a.*c","일치 항목":"\"abcbc\"의 \"abcbc\""},{"수량자":"+","설명":"이전 요소를 1개 이상 찾습니다.","무늬":"be+","일치 항목":"\"been\"의 \"bee\", \"bent\"의 \"be\""},{"수량자":"?","설명":"이전 요소를 0개 또는 1개 찾습니다.","무늬":"rai?","일치 항목":"\"rain\"의 \"rai\""},{"수량자":"{N}","설명":"이전 요소를 정확히 n 회 찾습니다.","무늬":",\\\\\\\d{3}","일치 항목":"\"1,043.6\"의 \",043\", \"9,876,543,210\"의 \",876\", \",543\" 및 \",210\""},{"수량자":"{N,}","설명":"이전 요소를 최소한 n 회 찾습니다.","무늬":"\\\\\\\d{2,}","일치 항목":"\"166\", \"29\", \"1930\""},{"수량자":"{N,M}","설명":"이전 요소를 n 회 이상, m 회 이하로 찾습니다.","무늬":"\\\\\\\d{3,5}","일치 항목":"\"166\", \"17668\"\"193024\"의 \"19302\""},{"수량자":"*?","설명":"이전 요소를 0개 이상 가능한 한 적은 개수로 찾습니다.","무늬":"a.*?c","일치 항목":"\"abcbc\" 의 \"abc\""},{"수량자":"+?","설명":"이전 요소를 1개 이상 가능한 한 적은 개수로 찾습니다.","무늬":"be+?","일치 항목":"\"been\"의 \"be\", \"bent\"의 \"be\""},{"수량자":"??","설명":"이전 요소를 가능한 한 적은 개수로 0개 또는 1개 찾습니다.","무늬":"rai??","일치 항목":"\"rain\" 내 \"ra\""},{"수량자":"{N}?","설명":"이전 요소를 정확히 n 회 찾습니다.","무늬":",\\\\\\\d{3}?","일치 항목":"\"1,043.6\"의 \",043\", \"9,876,543,210\"의 \",876\", \",543\" 및 \",210\""},{"수량자":"{N,}?","설명":"이전 요소를 최소한 n 회 이상 가능한 한 적은 개수로 찾습니다.","무늬":"\\\\\\\d{2,}?","일치 항목":"\"166\", \"29\", \"1930\""},{"수량자":"{N,M}?","설명":"이전 요소를 n 회에서 m 회 사이에서 찾으며, 가능한 한 적은 개수로 찾습니다.","무늬":"\\\\\\\d{3,5}?","일치 항목":"\"166\", \"17668\"\"193024\"의 \"193\", \"024\""}]

# 역참조

역참조(Backreference Constructs)는 문자열 내에서 반복된 문자 또는 부분 문자열을 식별할 때 사용하면 편리합니다.

[{"index":"역참조 구문","0":"\\\\\\\k<이름>"},{"index":"설명","0":"명명된 역참조입니다. 명명된 식의 값을 찾습니다."},{"index":"무늬","0":"(?\\\\\\\w)\\\\\\\k<\/char><\/char>"},{"index":"일치 항목","0":"\"seek\"의 \"ee\""}]

# 교체 구문

교체 구문(Alternation Constructs)은 either/or 또는 조건부 일치를 허용하도록 정규식을 수정합니다.

[{"교체 구문":"|","설명":"세로 막대(|)로 구분된 한 가지 요소와 일치합니다.","무늬":"th(e|is|at)","일치 항목":"\"this is the day.\"의 \"the\", \"this\""},{"교체 구문":"(?(표현식)예|아니오) 또는(?(표현식)예)","설명":"표현식으로 지정한 정규식 패턴이 일치하면 예와 일치합니다. 그렇지 않으면 아니오 부분과 일치합니다. 표현식은 너비가 0인 어설션으로 해석됩니다.명명되거나 번호가 매겨진 캡처 그룹과의 모호성을 방지하려면 필요에 따라 다음과 같이 명시적 어설션을 사용할 수 있습니다.(?( (?=표현식) )예|아니요)","무늬":"(?(A)A\\\\\\\d{2}\\\\\\\b|\\\\\\\b\\\\\\\d{3}\\\\\\\b)","일치 항목":"\"A10 C103 910\"의 \"A10\", \"910\""},{"교체 구문":"(?(이름)예|아니오)또는(?(이름)예)","설명":"명명되거나 번호가 매겨진 캡처링 그룹인 이름에 일치하는 항목이 있으면 예와 일치합니다. 그렇지 않으면 아니오와 일치합니다.","무늬":"(?\\\\\")?(?(quoted).+?\\\\\"|\\\\\\\S+\\\\\\\s)<\/quoted>","일치 항목":"\"Dogs.jpg \\\\\"Yiska playing.jpg\\\\\"\"의 \"Dogs.jpg \", \"\\\\\"Yiska playing.jpg\\\\\"\""}]

# 대체

대체(Substitutions)는 바꾸기 패턴에서만 인식되는 언어 요소입니다. 입력 문자열 중 일치하는 텍스트를 대체하는 텍스트의 전부 또는 일부를 정의합니다.

[{"문자":"${이름}","설명":"명명된 그룹 이름과 일치하는 부분 문자열을 대체합니다.","무늬":"\\\\\\\b(?\\\\\\\w+)(\\\\\\\s)(?\\\\\\\w+)\\\\\\\b<\/word2><\/word1>","바꾸기 패턴":"${word2} ${word1}","입력 문자열":"\"one two\"","결과 문자열":"\"two one\""},{"문자":"$$","설명":"\"$\" 리터럴을 대체합니다.","무늬":"\\\\\\\b(\\\\\\\d+)\\\\\\\s?USD","바꾸기 패턴":"$$$1","입력 문자열":"\"103 USD\"","결과 문자열":"\"$103\""},{"문자":"$&","설명":"일치하는 전체 문자열의 복사본을 대체합니다.","무늬":"\\\\\\\$?\\\\\\\d*\\\\\\\\.?\\\\\\\d+","바꾸기 패턴":"**$&**","입력 문자열":"\"$1.30\"","결과 문자열":"\"**$1.30**\""},{"문자":"$`","설명":"일치하는 문자열 앞에 있는 입력 문자열의 모든 텍스트를 대체합니다.","무늬":"B+","바꾸기 패턴":"$`","입력 문자열":"\"AABBCC\"","결과 문자열":"\"AAAACC\""},{"문자":"$'","설명":"일치하는 문자열 뒤에 있는 입력 문자열의 모든 텍스트를 대체합니다.","무늬":"B+","바꾸기 패턴":"$'","입력 문자열":"\"AABBCC\"","결과 문자열":"\"AACCCC\""},{"문자":"$+","설명":"캡처된 마지막 그룹을 대체합니다.","무늬":"B+(C+)","바꾸기 패턴":"$+","입력 문자열":"\"AABBCCDD\"","결과 문자열":"\"AACCDD\""},{"문자":"$_","설명":"전체 입력 문자열을 대체합니다.","무늬":"B+","바꾸기 패턴":"$_","입력 문자열":"\"AABBCC\"","결과 문자열":"\"AAAABBCCCC\""}]