-
Java - 정규표현식Java 2018. 1. 26. 01:21반응형
문자열이 정해져 있는 형식(정규 표현식)으로 구성되어 있는지 검증해야 하는 경우가 있다. 예를 들어 이메일 등이다. 그것을 검증 하는 방법이 있다.
정규 표현식 작성 방법기호설명
[ ]
한 개의 문자[abc]a,b,c중 하나의 문자[^abc]a,b,c 이외의 하나의 문자[a-zA-Z]a~z, A~Z중 하나의 문자\d한 개의 숫자,[0-9]와 동일\s공백\w한 개의 알파벳 또는 한 개의 숫자, [a-zA-Z_0-9]와 동일?없음 또는 한 개*없음 또는 한 개 이상+한 개 이상{n}정확히 n개{n,}최소한 n개{n, m}n개에서부터 m개까지( )그룹핑^시작$끝
이 표를 가지고 실습을 해보자
다음은 02-123-1234 또는 010-1234-5678과 같은 전화번호를 위한 정규 표현식이다.
(02|010)-\d{3,4}-\d{4}기호설명(02|010)02 또는 010-- 포함\d{3,4}3자리 또는 4자리 숫자-- 포함\d{4}4자리 숫자
다음은 이메일을 위한 정규 표현식이다.
\w+@\w+\. \w+(\.\w+)?기호설명\w+한 개 이상의 알파벳 또는 숫자@@\w+한 개 이상의 알파벳 또는 숫자\..\w+한개 이상의 알파벳 또는 숫자(\.\w+)?\.\w+이 없거나 한 번 더 올 수 있음1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27public static void main(String[] args) {
String regExp = "(02|010)-\\d{3,4}-\\d{4}";
//escape 문자 \ 방지를 위해서 \\를 두개 써준다.
String data = "010-1111-1234";
boolean result = Pattern.matches(regExp, data);
if(result)
{
System.out.println("정규식이 일치합니다.");
}
else
{
System.out.println("정규식이 일치하지 않습니다.");
}
regExp = "\\w+@\\w+\\.\\w+(\\.\\w+)?";
data = "asdfnaver.com";
result = Pattern.matches(regExp, data);
if(result)
{
System.out.println("정규식이 일치합니다.");
}
else
{
System.out.println("정규식이 일치하지 않습니다.");
}
}
Colored by Color Scripter와 같이 나오게 된다
Pattern 클래스는 문자열의 정규표현식을 검사해준다.
java.util.regex.Pattern 클래스의 정적 메소드인 matches() 메소드가 검증 하는 기능을 제공해준다.- 표현식^ : 문자열의 시작$ : 문자열의 종료. : 임의의 한 문자 (문자의 종류 가리지 않음)단, \ 는 넣을 수 없음* : 앞 문자가 없을 수도 무한정 많을 수도 있음+ : 앞 문자가 하나 이상? : 앞 문자가 없거나 하나있음[] : 문자의 집합이나 범위를 나타내며 두 문자 사이는- 기호로 범위를 나타낸다.[]내에서 ^가 선행하여 존재하면 not 을 나타낸다.{} : 횟수 또는 범위를 나타낸다.() : 소괄호 안의 문자를 하나의 문자로 인식| : 패턴 안에서 or 연산을 수행할 때 사용\s : 공백 문자\S : 공백 문자가 아닌 나머지 문자\w : 알파벳이나 숫자\W : 알파벳이나 숫자를 제외한 문자\d : 숫자 [0-9]와 동일\D : 숫자를 제외한 모든 문자\ : 정규표현식 역슬래시(\)는 확장 문자역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미(?i) : 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를구분하지 않음import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;public class PatternMatching {public static void main(String[] args) {String pattern = "";//pattern = "^\\S+\\.(pdf|txt|jpg)$"; //파일 확장자 구분//pattern = "^\\S+@\\S+.(com|co.kr|net)$"; // E-Mail//pattern = "^a"; // a로 시작하는 문자pattern = "^[0-9]+$"; // 숫자판별Pattern p = Pattern.compile(pattern);Scanner sc = new Scanner(System.in);while(true) {System.out.println("입력 ->");String input = sc.nextLine();Matcher m = p.matcher(input);if(m.matches()) { // find나 matches 둘다 boolean형태이고 패턴의 일치여부를 알 수 있다.System.out.println("통과 -> "+input);} else {System.out.println("잘못된 입력 -> "+input);}if(input.equals("x")) break;}sc.close();}}반응형'Java' 카테고리의 다른 글
Java - Wait, Notify (0) 2018.01.31 Java - Thread (0) 2018.01.30 Java - Stack, Queue (0) 2018.01.25 Java - Map (0) 2018.01.25 Java - Collection (0) 2018.01.25 댓글