Regular Expression
정규표현식이란?
특정한 패턴을 갖는 문자열을 검사하기 위해 사용되는 패턴식. 예를들어, [aaa, abc,aba] 는 모두 a로 시작하는 문자열들이며, 이러한 문자열을 검사하거나 필터링 하기 위해 정규표현식 을 이용하여 패턴검사를 할 수 있다.
정규표현식 규칙-기본
| 기호 | 설명 | 패턴 | ||
|---|---|---|---|---|
| . | 임의의 앞에 한 글자 | a.b -> abc, azc, afb | ||
| * | * 바로 앞의 문자가 없거나 한 개 이상 | a*b -> b, ab, aaab | ||
| + | + 바로 앞의 문자가 최소한 한 개 이상 | a+b -> ab, aab, aaaab | ||
| ? | ? 바로 앞의 문자가 없거나 한 개 존재 | a?b -> b, ab, cb, zb | ||
| ^ | ^뒤의 문자열과 같은 문자열로 시작하는 경우 | ^ab -> ab, abc,abcde | ||
| $ | $앞의 문자열과 같은 문자열로 끝나는 경우 | ab$ -> ab, sab, weab | ||
| [] | []안의 문자열 중 하나 | [a-z],[0-9],[a-zA-Z] | ||
| {} | {} 앞의 문자열 갯수 | a{1-3}b -> ab, aab, aaab | ||
| () | () 안의 문자는 그룹으로 인식 | a(bc){2} -> abcbc | ||
| \ | OR 연산 | a(b\ | c)d -> abc, acd | |
| [[:alpha:]] | 알파벳 | [a-zA-Z] | ||
| [[:alnum:]] | 알파벳과 숫자 | [a-zA-Z0-9] | ||
| [[:digit:]] | 숫자 | [0-9] | ||
| [[:space:]] | 공백 | |||
| [[:punct:]] | 구두점 |
정규표현식 예제
@gmail.com 으로 끝나는 문자열의 이름 찾기
import java.util.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
ArrayList<String> list = new ArrayList<String>();
String emailRegEx = ".+@gmail\\.com";
Pattern p = Pattern.compile(emailRegEx);
for(int i =0; i<n; i++){
String name = sc.next();
String email =sc.next();
Matcher m = p.matcher(email);
if(m.find()){
list.add(name);
}
}
Collections.sort(list);
for(String s : list){
System.out.println(s);
}
}
}