From b6fd90b205bf092a0a5ccc2626b6e84530806683 Mon Sep 17 00:00:00 2001 From: livenow14 Date: Tue, 2 Nov 2021 23:25:02 +0900 Subject: [PATCH] feat: #35 --- .../README.md" | 0 .../gump.md" | 82 +++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 "java/q7-\354\240\225\352\267\234\355\221\234\355\230\204\354\213\235\354\227\220 \353\214\200\355\225\264 \354\204\244\353\252\205\355\225\264\354\243\274\354\204\270\354\232\224/README.md" create mode 100644 "java/q7-\354\240\225\352\267\234\355\221\234\355\230\204\354\213\235\354\227\220 \353\214\200\355\225\264 \354\204\244\353\252\205\355\225\264\354\243\274\354\204\270\354\232\224/gump.md" diff --git "a/java/q7-\354\240\225\352\267\234\355\221\234\355\230\204\354\213\235\354\227\220 \353\214\200\355\225\264 \354\204\244\353\252\205\355\225\264\354\243\274\354\204\270\354\232\224/README.md" "b/java/q7-\354\240\225\352\267\234\355\221\234\355\230\204\354\213\235\354\227\220 \353\214\200\355\225\264 \354\204\244\353\252\205\355\225\264\354\243\274\354\204\270\354\232\224/README.md" new file mode 100644 index 0000000..e69de29 diff --git "a/java/q7-\354\240\225\352\267\234\355\221\234\355\230\204\354\213\235\354\227\220 \353\214\200\355\225\264 \354\204\244\353\252\205\355\225\264\354\243\274\354\204\270\354\232\224/gump.md" "b/java/q7-\354\240\225\352\267\234\355\221\234\355\230\204\354\213\235\354\227\220 \353\214\200\355\225\264 \354\204\244\353\252\205\355\225\264\354\243\274\354\204\270\354\232\224/gump.md" new file mode 100644 index 0000000..f65da34 --- /dev/null +++ "b/java/q7-\354\240\225\352\267\234\355\221\234\355\230\204\354\213\235\354\227\220 \353\214\200\355\225\264 \354\204\244\353\252\205\355\225\264\354\243\274\354\204\270\354\232\224/gump.md" @@ -0,0 +1,82 @@ +# 정리 + +> 정규표현식이란 텍스트를 찾고 조작하는데 쓰이는 `정규 표현 언어`로 이루어진 문자열이에요. +> + +정규 표현 언어는 완전한 프로그래밍 언어는 아니고, 프로그래밍 언어에 포함된 작은 언어에요. 그렇기 때문에 정규 표현식이 구현되는 방법은 언어마다 달라요. + +## 표준 문법 + +주로 `패턴(pattern)`으로 부르는 정규 표현식은 특정 목적을 위해 필요한 문자열 집합을 지정하기 위해 쓰이는 표현식이이에요. 패턴에 맞는 문자열을 `일치(match)` 시켰다고 말해요. + +### POISX 기본 문법 + +| 메타문자 | 기능 | 설명 | +|---|---|---| +| . | 문자 | 1개의 문자와 일치시김. 단일행 모드에서는 CRLF를 제외함 | +| [ ] | 문자 클래스 | "["과 "]" 사이의 문자 중 하나를 선택. "¦"를 여러 개 쓴 것과 같은 의미. 예를 들면 [abc]d는 ad, bd, cd를 뜻함. 또한, "-" 기호와 함께 쓰면 범위를 지정할 수 있음. "[a-z]"는 a부터 z까지 중 하나, "[1-9]"는 1부터 9까지 중의 하나를 의미함. | +| [^ ] | 부정 | 문자 클래스 안의 문자를 제외한 나머지를 선택. 예를 들면 [^abc]d는 ad, bd, cd는 포함하지 않고 ed, fd 등을 포함. [^a-z]는 알파벳 소문자로 시작하지 않는 모든 문자를 의미. | +| ^ | 처음 | 문자열이나 행의 처음을 의미. | +| $ | 끝 | 문자열이나 행의 끝을 의미. | +| ( ) | 하위식 | 여러 식을 하나로 묶을 수 있음. "abc¦adc"와 "a(b¦d)c"는 같은 의미를 가짐. | +| \n | 일치하는 n번째 패턴 | 일치하는 패턴들 중 n번째를 선택하며, 여기에서 n은 1에서 9 중 하나가 올 수 있음 | +| '*' | 0회 이상 | 0개 이상의 문자를 포함. "a*b"는 "b", "ab", "aab", "aaab"를 포함. | +| {m, n} | m회 이상 n회 이하 | "a{1,3}b"는 "ab", "aab", "aaab"를 포함하지만, "b"나 "aaaab"는 포함하지 않음. | + +
+ +### POSIX 확장 문법 + +| 메타문자 | 기능 | 설명 | +|---|---|---| +| ? | 0 또는 1회 | "a?b"는 "b", "ab"를 포함. | +| + | 1회 이상 | "a+b"는 "ab", "aab", "aaab"를 포함하지만 "b"는 포함하지 않음. | +| ¦ | 선택 | 여러 식 중에서 하나를 선택. 예를 들어, "abc¦adc"는 abc와 adc 문자열을 모두 포함. | + +### POSIX 문자 클래스 + +메타 문자와 여러 문자 집합을 줄여 쓰는 방법이에요. + +전부는 아니지만 많은 정규 표현식에서 지원해요. (자바스크립트는 지원안함) + +`[:alnum:]`: 알파벳과 숫자 [A-Za-z0-9] + +`[:alpha:]`: 알파벳 [A-Za-z] + +`[:blank:]`: 탭과 공백 문자(space) + +`[:cntrl:]`: 제어 문자 + +`[:digit:]`: 숫자 [0-9] + +`[:graph:]`: 제어문자와 공백 문자를 제외한 문자 [:print:]와 동일하나, 빈칸 제외 + +`[:lower:]`: 소문자 [a-z] + +`[:upper:]`: 대문자 [A-Z] + +`[:print:]`: 제어문자를 제외한 문자, 즉 프린터 할 수 있는 문자 + +`[:punct:]`: [:graph:]문자 중 [:alnum:]을 제외한 문자. ex)!,@,#,$,%,^.... + +`[:space:]`: 화이트스페이스 ex)공백, 탭, 케리지 리턴, 새행, 수직탭, 폼필드 [\f\n\r\t\v ]와 같다 + +`[:xdigit:]`: 모든 16진수문자 + +
+ +## Refer + +
+ +# 질문 + +## 나만 알만한 것 + +### 질문 + +왜 언어마다 정규표현식의 지원 범위가 다를까? + +### 답변 + +언어에 포함된 작은 언어이기 때문 \ No newline at end of file