반응형
코딩을 비롯해서 수많은 경우에 정규식은 아주 다양하게 사용됩니다.
예를 들어 VS code 상에서 특정한 규칙의 패턴을 검색해서 동시에 변환한다던가할때도 사용 가능하고,
대다수의 언어에서 제공하는 Regular Expression 기능을 이용해서 텍스트를 처리할때 많이 사용하게됩니다.
이 포스팅에서는 다양한 경우의 정규식 예에 대해 알아보려고합니다.
추가로 제가 사용하게 되는 경우마다 예제를 업데이트해나가려고합니다.
우선 예제 코드를 두고, 각각의 경우에 어떤 것들이 선택되는지 캡처화면으로 보여드리겠습니다.
예제 코드
const constData = {
"1inch": 33991.537894,
"aave": 234.800741,
"ada": 53576.821414,
"aed": 70729.394532,
"afn": 1684816.811341,
};
메타 캐릭터
Character | Description |
^ | 시작점. 여러줄의 문서에서 줄의 첫번째부터 검색한다는 의미입니다.아래 예제를 보면 constData에도 const가 포함되지만, 첫번째줄에서 시작하지않으므로 선택되지않습니다. ^const ![]() 아래 예제에서는 ^가 없으므로, 두개의 const 가 모두 선택됩니다. const ![]() |
. | 개행문자(\n)을 제외한 모든 문자를 의미합니다. 아래 예제를 보면 .이 모든 문자를 의미하므로 const 2개가 선택됩니다. c.n.t ![]() |
[ ] | [ ] 안에 들어가는 모든 문자 중 하나를 의미합니다. 아래 예제에서는 1 또는 4뒤에 1이 오는 모든 경우를 선택합니다. [14]1 ![]() [a-z]로 입력하면 모든 알파벳 소문자를 의미합니다. 1[a-z] ![]() [A-z]로 입력하면 모든 알파벳 대소문자를 포함합니다. const[A-z] ![]() [0-9]로 입력하면 모든 숫자를 포함합니다. 모든 메타 케릭터에 해당하는 문자들은 \를 붙여서 검색해야합니다. 마침표의 경우 모든 문자를 의미하는 메타 케릭터이므로, 마침표를 검색할때는 \. 로 검색해야합니다. [0-9]\.[0-9] ![]() |
[^ ] | 포함하지않는 모든 캐릭터 한 글자를 의미합니다. 아래 예제에서는 a뒤에 a,d,e가 나오지않는 2글자를 찾습니다. a[^ade] ![]() |
$ | 개행 문자 직전의 마지막 글자를 검색합니다. 아래 예제에서는 쉼표로 끝나는 경우만을 검색합니다. "1inch," 라는 문자열에도 쉼표가 포함됩니다만, 해당 경우는 줄의 마지막 글자가 아니므로 검색되지않습니다. ,$ ![]() |
* | 0번 이상 반복되는 경우입니다. 아래 경우에 3과 4사이에 숫자가 있는 모든 경우를 검색합니다. 3[0-9]*4 ![]() |
+ | 1번 이상 반복되는 경우입니다. 아래 경우에 3과 4사이에 하나 이상의 숫자가 있는 경우를 검색합니다. 3[0-9]+4 ![]() |
( ) | 그룹 검색시에 사용됩니다. 추가로 해당 그룹은 바로 뒤에 나오는 추출 기능에 사용할 수 있습니다. 아래와 같이 검색하면 14가 반복되는 경우를 검색하게됩니다. (14)+ ![]() |
\n | 여기서 n은 1~9까지의 숫자를 의미합니다. 해당 숫자는 위의 ( ) 메타 케릭터로 그룹핑한 그룹의 넘버입니다. 예를 들어 같은 숫자나 문자가 2번씩 나오는 경우만 캡춰하고 싶을 때는 아래와 같이 사용합니다. [A-z0-9] 로 알파벳 또는 숫자 한글자를 선택하고, ([A-z0-9]) 로 해당 글자를 그룹핑한 후에, \1 로 그룹1번이 한 번 더 나오는 경우를 검색합니다. ([A-z0-9])\1 ![]() 아래의 경우에는 숫자 2개가 나오고, 순서대로 반복되는 경우를 찾아주게됩니다. ([0-9])([0-9])\1\2 ![]() |
{m, n} | 앞에 나오는 요소가 m번에서 n번 반복되는 경우를 검색합니다. 아래의 경우 a가 2번에서 3번 반복되는 경우를 검색합니다. a{2,3} ![]() |
? | 있거나 없을수 있습니다. 아래 예제에서는 9가 있거나 없을 수 있습니다. 39?4 ![]() Lazy match에도 사용할 수 있습니다. 일반적으로 *, + 등을 사용하게되면 Greedy match라고해서 가능한 최대 사이즈로 검색을 하게됩니다. Lazy match는 최소 사이즈로 검색합니다. 특히나 여러개의 괄호가 복잡하게 얽혀있는 경우 Lazy match를 사용해야할 경우가 맞습니다. 아래 예제를 보시죠. 2와 4 사이에 어떤 숫자가 있던 최대 사이즈로 검색을 해냅니다. 이 경우를 Greedy match라고합니다. 2\d+4 ![]() 아래의 경우는 ?를 사용한 Lazy match입니다. 최소 사이즈로 검색해냅니다. 2\d+?4 ![]() |
| | or 입니다. | 캐릭터의 앞 또는 뒤인 경우 선택됩니다. ada|aed ![]() |
역슬래시 표현식
Expression | Description |
\d | digit입니다. 숫자 하나를 검색합니다. 아래 예제에서 \d가 숫자 하나, 뒤의 inch는 문자열로 검색됩니다. \dinch ![]() |
\D | digit이 아닌 경우입니다. 숫자 이외의 한 글자를 검색합니다. 아래 예제에서는 숫자가 아닌 한글자 뒤에 숫자 하나가 나오는 경우를 검색합니다. \D\d ![]() |
\w | 알파벳과 숫자인 경우를 검색합니다. 예제에서는 알파벳과 숫자 뒤에 쉼표가 나오는 경우를 검색합니다. \w, ![]() |
\W | 알파벳과 숫자를 제외한 문자를 검색합니다. 아래에서는 알파벳/숫자가 아닌 문자 뒤에 5가 나오는 경우를 검색합니다. \W5 ![]() |
\s | 공백과 탭을 검색합니다. 예제에서는 공백뒤에 3이 오는 경우를 검색합니다. \s3 ![]() |
\S | 공백과 탭이 아닌 경우를 검색합니다. 예제에서는 공백이 아닌 문자뒤에 7이 나오는 경우를 검색합니다. \S7 ![]() |
\b | \w에 해당하는 문자열의 boundary를 의미합니다. 알파벳 또는 숫자만으로 이루어진 문자열을 한 묶음으로보고, 그 문자열 한 묶음에서 첫번째 문자의 앞과 마지막 문자의 뒤를 의미합니다. 아래 예제에서는 3으로 시작하고, 중간에 숫자들이 있으며 1로 끝나는 문자열을 검색합니다. \b3\d+1\b ![]() |
예제
Example | Expression |
이메일 검색 | [\w-\.]+@([\w-]+\.)+[\w-]{2,4} |
Flutter/Dart 예제
: ; , = \ 를 검색하여 \: \; \, \= \\ 로 각각 변경
string.replaceAllMapped(RegExp(r'([:;,=\\])'), (match) => '\\${match.group(0)}');
반응형
'Programming' 카테고리의 다른 글
[Autohotkey] Numbering powerpoint pages (0) | 2025.04.06 |
---|---|
[Dart / Flutter] 한글 초성 검색 구현하기 (0) | 2022.11.01 |
GitHub : Flutter Web app을 GitHub Pages를 이용해 Deploy하기 2/2 (0) | 2022.10.02 |
GitHub : Flutter Web app을 GitHub Pages를 이용해 Deploy하기 1/2 (0) | 2022.10.02 |
GitHub : GitHub 에서 Source code 가져오기 (Clone) (0) | 2022.10.01 |