정규표현식
특정한 규칙(패턴)을 가진 문자열의 집합을 표현하는데 사용되는 표현식 언어이다.
Meta 문자 정리
표현식 | 내용 |
.x | "." 자리에 임의의 문자가 들어가며 x문자를 포함 |
^x | 문자의 처음을 나타내고 x문자로 시작 |
x$ | 문자의 끝을 나타내고 x문자로 끝 |
x* | 바로 앞에 문자가 없거나 x문자가 0번 또는 한 번 이상 반복 |
x+ | x문자가 반드시 한번 이상 반복 |
x? | x문자가 없거나 있을 수 있음 |
[a-z] | 알파벳 소문자가 포함된 모든 문자열 검색 |
[A-Z] | 알파벳 대문자가 포함된 모든 문자열 검색 |
[0-9] | 숫자가 포함된 모든 문자열 검색 |
[^ ] | []안에 문자를 포함하지 않는 문자열 검색(부정) |
x{n} | x문자 n번 반복 |
x{n,} | x문자 n번 이상 반복 |
x{n,m} | x문자 n번 이상 m번 이하 반복 |
\w | 알파벳과 숫자를 포함한 모든 문자열 검색 -> [a-zA-Z0-9] |
\W | 알파벳과 숫자를 제외한 모든 문자열 검색 -> [^a-zA-Z0-9] |
\d | 숫자가 포함된 모든 문자열 검색 -> [0-9] |
\D | 숫자를 제외한 모든 문자열 검색 -> [^0-9] |
\s | 공백을 의미 |
\S | 공백이 아닌 문자를 의미 |
자바 API 정규표현식
java.util.regex
Pattern 클래스 메서드
static Pattern complie(String regex) : 입력한 정규표현식으로 패턴 생성
static Matcher matcher(CharSequence input) : 문자열이 패턴과 일치할 경우 true 반환
String pattern : 컴파일된 정규표현식 String타입으로 반환
String split(CharSequence input) : 패턴에 따라 문자열을 분리
Matcher 클래스 메서드
boolean matches() : 패턴과 문자열이 일치하면 true를 반환
boolean find() : 패턴과 문자열이 일치하는 경우 true를 반환
String group() : 매칭된 부분을 반환
String replaceAll(String replacement) : 패턴과 일치되는 부분을 replacement로 대체
- 예제 코드
import java.util.Scanner;
public class RegularExam {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("문자열 입력 : ");
String str = sc.nextLine();
//abc문자 포함
if(str.matches(".*abc.*")){
System.out.println("매칭");
} else {
System.out.println("비매칭");
}
//숫자만 3자리 입력
if(str.matches("[\\d]{3}")){
System.out.println("매칭");
} else {
System.out.println("비매칭");
}
//알파벳, 숫자만 5자리 이상
if(str.matches("[\\w]{5,}")){
System.out.println("매칭");
} else {
System.out.println("비매칭");
}
//한글 3~5자리 입력
if(str.matches("[가-힣]{3,5}")){
System.out.println("매칭");
} else {
System.out.println("비매칭");
}
//dolsam77@nate.com ==>매칭
//32dolsam77@nate.com ==>비매칭
//dolsam77nate.com ==>비매칭
//dolsam77@nate.comcom ==> 비매칭
if(str.matches("^[\\D]\\w+@\\w+.\\w{2,3}$")){
System.out.println("매칭");
} else {
System.out.println("비매칭");
}
//이미지 파일 구별
//abc.jpg , abc.gif , abc.png, abc.txt
// (?i) ==> 소대문자 구분없이
if(str.matches("^\\S+\\.(?i)(jpg|gif|png)$")){
System.out.println("이미지파일");
} else {
System.out.println("일반파일");
}
예제코드(2)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExam2 {
public static void main(String[] args) {
String data[] = {
"bat", "bba", "bbg", "bonus",
"CA", "ca", "c232", "car",
"date", "dic", "diraaa"
};
Pattern pt = Pattern.compile("c[a-z]*");
for(int i = 0; i <data.length; i++) {
Matcher m = pt.matcher(data[i]);
if(m.matches()) {
System.out.println(data[i]);
}
}
String source = "abc?de?fgh";
String reg = "(\\w*)"; //그룹 괄호()로 표현
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(source);
while(m.find()) {
System.out.println(m.group());
}
String source2 = "HP:010-1111-1111, HOME:02-222-2222";
String reg2 = "(0\\d{1,2}-\\d{3,4}-\\d{4})";
Pattern p2 = Pattern.compile(reg2);
Matcher m2 = p2.matcher(source2);
while(m.find()) {
System.out.println(m2.group());
}
}
}
'Java' 카테고리의 다른 글
[Java] 자료구조 List, Set, Map (0) | 2020.07.24 |
---|---|
[Java] 입출력(IO) 정리 (0) | 2020.07.22 |
[Java] java.lang패키지(2) String클래스, StringBuffer클래스 (0) | 2020.07.17 |
[Java] java.lang패키지(1) Object 클래스, wrapper클래스 (0) | 2020.07.17 |
[Java] 객체지향(5) 추상클래스와 인터페이스 (0) | 2020.07.16 |