[JS, JAVA] 정규식
: 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 언어입니다.
^ | 문자열의 시작 |
$ | 문자열의 끝 |
. | 임의의 한 문자 |
* | 문자가 0번 이상 발생 |
+ | 문자가 1번 이상 발생 |
? | 문자가 0번 혹은 1번 발생 |
[ ] | 문자의 집합 범위를 나타냄 [0-9] : 숫자 (0부터 9) [a-z] : 알파벳 (a부터 z) 앞에 ^가 나타나면 not을 의미 |
{ } | 횟수 또는 범위를 의미 |
( ) | 소괄호 안의 문자를 하나의 문자로 인식 |
| | or 조건 |
\ | 확장 문자의 시작 |
\b | 단어의 경계 |
\B | 단어가 아닌 것의 경계 |
\A | 입력의 시작부분 |
\G | 이전 매치의 끝 |
\Z | 입력의 끝이지만 종결자가 있는 경우 |
\z | 입력의 끝 |
\s | 공백문자 |
\S | 공백문자가 아닌 나머지 문자 |
\w | 알파벳이나 숫자 |
\W | 알파벳이나 숫자를 제외한 문자 |
\d | [0-9]와 동일 |
\D | 숫자를 제외한 모든 문자 |
(?:) | 캡처(Capture)하지 않는 그룹 |
자주 사용하는 정규식모음
한글, 숫자, 영문 | ^[가-힣0-9a-zA-Z]*$ |
이메일 | \\w+@\\w+\\.\\w+(\\.\\w+)? |
특수문자 | [^가-힣0-9a-zA-Z] |
휴대전화번호 | ^01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4}$ |
JAVA
find() : 패턴이 일치하는 경우 true를 반환하고, 그 위치로 이동(여러개가 매칭되는 경우 반복 실행가능)
find(int start) : start위치 이후부터 매칭검색을 수행
start() : 매칭되는 문자열 시작위치 반환
start(int group) : 지정된 그룹이 매칭되는 시작위치 반환
end() : 매칭되는 문자열 끝 다음 문자위치 반환
end(int group) : 지정되 그룹이 매칭되는 끝 다음 문자위치 반환
group() : 매칭된 부분을 반환
group(int group) : 매칭된 부분중 group번 그룹핑 매칭부분 반환
groupCount() : 패턴내 그룹핑한(괄호지정) 전체 갯수 반환
matches() : 패턴이 전체 문자열과 일치할 경우 true 반환
String line = "aaaaaaaaa1234bbbbbbbb";
String pattern = "(.*)([0-9]{3,})(.*)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
while (m.find()) {
System.out.println(m.group(0));
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
}
aaaaaaaaa1234bbbbbbbb (0 전체)
aaaaaaaaa1 (1번째 그룹)
234 (2번째 그룹)
bbbbbbbb (3번째 그룹)
String line = "wooyeo n0111123333333333333333333333333333333333333333111111111111116@gmail.com";
String pattern = "[^가-힣0-9a-zA-Z]";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(line);
while(m.find()) {
System.out.println(line.substring(m.start(), m.end()));
}
Javascript
exec() : 문자열에서 일치하는 부분을 탐색합니다. 일치 정보를 나타내는 배열, 또는 일치가 없는 경우 null을 반환합니다.
test() : 문자열에 일치하는 부분이 있는지 확인합니다. true 또는 false를 반환합니다.
match() : 캡처 그룹을 포함해서 모든 일치를 담은 배열을 반환합니다. 일치가 없으면 null을 반환합니다.
search() : 문자열에서 일치하는 부분을 탐색합니다. 일치하는 부분의 인덱스, 또는 일치가 없는 경우 -1을 반환합니다
플래그를 활용한 고급 탐색
d | 부분 문자열 일치에 대해 인덱스 생성. |
g | 전역 탐색. |
i | 대소문자를 구분하지 않음. |
m | 여러 줄에 걸쳐 탐색. |
s | 개행 문자가 .과 일치함. |
u | "unicode", 패턴을 유니코드 코드 포인트의 시퀀스로 간주함. |
y | "접착" 탐색, 대상 문자열의 현재 위치에서 탐색을 시작함. sticky (en-US)를 참고하세요. |
const regex = /hello/;
const str = 'hello world';
console.log(regex.test(str)); // true
const regex = /hello/;
const str = 'hello world';
const result = regex.exec(str);
console.log(result); // ["hello"]
console.log(result.index); // 0 (매치된 문자열의 시작 인덱스)
console.log(result.input); // "hello world" (원본 문자열)
const str = 'hello world hello';
const result = str.match(/hello/g); // 'g' 플래그로 모든 매치를 찾음
console.log(result); // ["hello", "hello"]
참조
https://hbase.tistory.com/160
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions