* 단어 찾기
단어를 찾으려면 그냥 단어를 입력하면 끝이다.
* 해당 단어 제외하고 모두 찾기
\b(?!\bto\b)\w+\b
\b
word boundary를 표현하며 문자와 공백 사이의 문자를 의미
?!
거짓인 것을 찾는다.
\bto\b
word boundary 안에 존재하는 to를 의미
\w+
\w는 [0-9a-zA-Z]를 의미하며 +는 1번이상 반복을 의미
\b
다시 word boundary를 의미
⇒ \b의 word boundary는 단어의 시작이나 끝을 의미한다. 여기서 재밌는 점은 경계를 가리킨다는 점이다. 따라서 단어의 끝,시작의 경계에 \b가 매칭된다.
* 전화번호
전화번호는 XX(X)-XXX(X)-XXXX 로 구성된다. 따라서 숫자와 -를 잘 구성하면 된다.
^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$
^
는 정규표현식의 처음을 의미
[0-9]{2,3}
는 0~9까지를 의미하고 2개나 3개를 의미
-
는 전화번호의 특수기호 -를 의미
[0-9]{3,4}
는 0~9까지를 허용하며 3개나 4개를 의미
[0-9]{4}$
는 0~9까지를 허용하며 4개를 의미, 그리고 $는 문자의 끝을 의미
* 휴대폰 번호
휴대폰 번호는 0XX-XXX(X)-XXXX 로 구성된다. 따라서 전화번호와 비슷한 구조를 가진다. 혹인 하이픈 없이 XXXXXXXXX이런 구성도 가능하다 가정한다.
^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$
^ 는 정규표현식의 처음을 의미
01 은 숫자 자체를 의미
([0|1|6|7|8|9]?) 은 0,1,6,7,8,9가 올수 있으며 ?은 존재여부를 나타내므로 있거나 없거나를 의미
-? 은 -이 존재할수도 있고 없을수도 있다고 판단
([0-9]{3,4})
숫자가 3자리에서 4자리 가능
([0-9]{4})$
숫자가 4자리 가능하고 문자열 끝 의미
* 이메일
이메일은 XXX(-._\XX)@XXX.XX(X).XX(X) 로 대략 구성된다. 앞은
^[0-9a-zA-Z]*([-_.\\]?[0-9a-zA-Z])*@[0-9a-zA-Z]*([-_.\\]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$
^[0-9a-zA-Z]*
^은 시작을 의미하고 0~9,a-z,A-Z까지의 문자 전부 의미. *은 0번이거나 그 이상 반 복 가능
([-_.\\]?[0-9a-zA-Z])*
- _ . \이 가능하며 ?은 존재 여부 의미. 즉 앞의 특수 문자가 존재하거나 없거나 의미함. 그리고 0~9,a~z,A~Z 를 의미한다. 마지막으로 이러한 단위가 *로 0번이거나 반복 가능. (\ 이 아닌 \은 특수한 기능을 제거하고 문자 자체로 인식하게 하기 위함.)
@
그냥 '@' 문자 한 개 의미
\.[a-zA-Z]{2,3}$
. 은 어떤 값이든 의미하는 dot특수문자이므로 \를 붙여서 단순 문자로 바꿔준다. 그리고 다음은 a~z,A~Z까지 2~3개 의미. $은 문자열 종료를 의미
래퍼런스
https://hamait.tistory.com/342 (자세한 설명)
https://regexr.com/ (정규표현식을 테스트해볼 수 있는 사이트)
'삽질방지' 카테고리의 다른 글
[python3] binary string to integer, integer to binary string (0) | 2022.02.17 |
---|---|
파이썬 재귀 제한 풀기 (0) | 2022.02.16 |
[c++] ios::sync_with_stdio(0), cin.tie(0) 는 왜 쓰는 걸까? (0) | 2021.07.19 |
[c++] \n 와 endl 중에는 \n가 더 빠르다. (0) | 2021.07.19 |
python3 루트 씌우기, 제곱근, 세제곱근 사용하기 ( sqrt(n) ) (0) | 2021.02.07 |