: 문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'하거나 '치환'하는 과정을 매우 간편하게 처리 할 수 있도록 하는 수단
^ : 문자열의 시작을 표현한다. [ ... ] 내부에서 쓰이는 경우라면 뒤의 패턴에 일치하지 않는 것을 선택한다.
^http : 문자열이 http로 시작하는 경우에만 매치하며, 중간에 나타난 http에는 매치하지 않는다.
ab[^0-9]: “ab” 뒤에 숫자가 아닌 것이 오는 것에만 매치한다. (“abc” – O, “ab1” – X)
$ : 문자열의 끝을 표현한다.
them$ : 문자열이 “them”으로 끝난 경우에만 해당 “them”에 매치한다.
\b : 단어의 경계. 문자열 시작과 끝, 공백, 개행, 탭, 콤마, 구두점, 대시문자 등이 올 수 있다.
\bplay\b : 는 단어 경계로 구분되는 “play”에는 매치한다. 하지만 “playground”의 “play”에는 매치하지 않는다.
\B : \b가 아닌것. 정규식 메타문자에서는 흔히 대문자로 표현한 것은 소문자로 표현한 문자의 반대를 의미한다.
\bplay\B : “play”뒤에 단어의 경계가 아닌 것이 올 때에만 매치한다. “playground”, “playball”의 “play”에 매치한다. 뒤에 오는 “g”, “b” 등의 문자는 포함하지 않는다.
\s : 공백 문자 및 탭 문자에 매치한다.
\S : 공백 문자가 아닌 한 글자에 매치한다.
\d : 숫자에 매치한다. [0-9]와 같다.
\D : 숫자가 아닌 문자에 매치한다. [^0-9]와 같다.
\w : 단어를 만들 수 있는 글자. 알파벳 대소문자, 숫자, 언더스코어를 포함한다. [A-Za-z0-9_] 와 같다.
\W : \w에 포함되지 않는 문자들
\n : 개행문자. \r은 캐리지 리턴이다.
\ : 이스케이프용 문자. 정규식 상의 특별한 의미가 있는 문자들을 문자 그대로 쓸 때 앞에 붙인다. \^ 라고 쓰면 “^” 문자 그대로를 가리킨다.
. : 아무 문자 1개에 대응된다. 공백 역시 문자 1개로 취급된다.
: 토크나이저란 어떤 구문에서 의미있는 요소들을 토큰으로 쪼개는 역할을 하고 렉서는 토큰의 의미를 분석하는 역할을 한다.
: Tokenizer, Lexer 의 역할을 합하여 Lexical anlyze라고 한다. Lexical Analyze란 의미 있는 조각을 검출하여 토큰을 생성하는 것을 말한다.
: Parser는 Lexical analyze 되어 토큰화된 데이터를 가지고 그것을 구조적으로 나타낼 수 있게 해준다. 또한 데이터를 구조적으로 바꾸는 과정에서 데이터가 올바른지 검증을 수행한다. 대부분의 인터프리터와 컴파일러에서 소스코드를 구조적으로 나타내는 자료구조로 AST를 사용한다.
Lexer 를 통해 생성만 배열을 json 형식으로 바꾸어서 파싱한다.
참조 : https://opentutorials.org/course/909/5142 ,
https://velog.io/@mu1616/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC-%EC%9D%B4%EB%A1%A0%EC%97%90%EC%84%9C-%ED%86%A0%ED%81%AC%EB%82%98%EC%9D%B4%EC%A0%80Tokenizer-%EB%A0%89%EC%84%9CLexer-%ED%8C%8C%EC%84%9CParse-%EC%9D%98-%EC%97%AD%ED%95%A0