^ : 문자열의 시작을 표현한다. [ ... ] 내부에서 쓰이는 경우라면 뒤의 패턴에 일치하지 않는 것을 선택한다.
^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개로 취급된다.
: 정규(正規)라는 단어의 의미는 규칙적인 무언가, 패턴이다. 즉, 정규 표현이라는 것은 결국 말 그대로 규칙적인 패턴을 표현하고 있다는 의미이기 때문에 우리는 일반적으로 정규 표현식이 문자열에서 내가 원하는 패턴을 매칭하는 도구이다
대표적으로 HTML, CSS와 같이 무한하게 열릴 수 있는 태그나 괄호가 존재하는 언어는 무수한 예외 상황이 나오기 때문에 규척적인 패턴을 가지기는 어렵다 !
결론 : 하나의 HTML을 위해서 정규 표현식을 만들어서 Pasing을 한다고 가정한다면 해당하는 HTML 만 사용할 수 있고 다른 HTML의 경우에는 사용이 불가하다. HTML 마다 정규 표현식을 만들어 주지 않는다면 정규 표현식 만으로 HTML을 Parsing 하는것은 실질적으로 불가능 하다 !
url 주소만 가져오기
: "(http.?)://([a-zA-Z09$-.+!*'()]+/)"
모든 태그 가져오기
: ([a-z]+)=
태그 value 값 가져오기
: 태그명="([a-z]+)" -> class="([a-zA-Z0-9.]+)"
열린 태그와 닫힌 태그 가져오기
: (<[a-z]+).+>.+<(/[a-z]+>)
태그 안에 text 가져오기
: <[a-z]+.+>(.+)</[a-z]+>
참고 : https://evan-moon.github.io/2021/05/07/why-regexp-called-regexp/