티스토리 뷰

JAVA

Pattern (정규표현식)

˙ᵕ˙ 2020. 10. 7. 02:10
<< 정규표현식 >>
텍스트를 검색하거나 치환하거나 텍스트 안에서 특정 문자열을 추출하려고 할때 사용
특수문자나 기호로 만들어진 패턴이라고 생각

1. 자바 API
	String클래스의 matches메소드
	java.util.regex패키지의 클래스를 이용해서 작업
	1) Pattern클래스
		- 패턴 문자열을 관리하고 패턴을 정의할 때 사용
	2) Matcher클래스
		- 패턴과 일치하는 문자열을 관리하기 위한 클래스
		find() - 패턴이 만족하는지 확인 (true | false)
		group() - 일치하는 패턴문자열 리턴
		start() - 매칭되는 패턴의 start인덱스
		end() - 매칭되는 패턴의 end index+1 
package pattern.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternTest01 {
	public static void main(String[] args) {
		String str = "java, hi ~~~ java";
		String str1 = "$100. . 한. $20.0. ^^$";
		String patternStr = "java"; // 1. 정확하게 일치
		String patternStr1 = "Java"; // 2. 대소문자 구분없이 문자열이 동일한 경우 찾기 
		String patternStr2 = "Java,hi"; // 3. space, tab, new line의 구분을 정확하게
		String patternStr3 = "^java"; // 4. 특정문자열로 시작
		String patternStr4 = "java$"; // 5. 특정문자열로 끝나는지 확인
		String patternStr5 = "^$"; // 	패턴에서 쓰는 기호를 패턴문자열로 사용하고 싶은 경우
								   	// 	패턴기호를 실행시키기 때문에 불가능
									//	일반 문자열로 인식시키기 위해서 \\와 함께사용
									//	$로 시작하는 문자열
		String patternStr6 = "^\\$"; // 6. $로 시작하는 문자열
		String patternStr7 = "\\$$"; // 7. $로 종료하는 문자열
		String patternStr8 = "."; //   .은 한글자를 의미 - 모든 문자열이 한 문자에 해당 
								//		한 문자씩 잘라서 리턴
		String patternStr9 = "\\."; // 8. .문자가 있는 것을 찾아서 리턴
		String patternStr10 = "...."; // 9. .이 4개 - 4글자씩 잘라서 리턴
		String patternStr11 = "\\..\\."; // 10. .과 . 사이의 한글자가 있는 문자열 
		
		equalsPattern(str1, patternStr11); 
	}
	public static void equalsPattern(String str, String patternStr) {
//		Pattern pattern = Pattern.compile(patternStr); // 1. 정확하게 일치
		Pattern pattern = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
		Matcher m = pattern.matcher(str); 
		
		while (m.find()) {
			System.out.println(m.group());
			System.out.println(m.start() + ":" + (m.end() - 1));
		}
		
	}
}
  • 실행

  • 문자열 : "java, hi ~~~ java";

  1. 정확하게 일치

 2. 대소문자 구분없이 문자열이 동일한 경우

 

3. space, tab, new line의 구분을 정확하게

4. 특정문자열로 시작

 

5. 특정문자열로 끝나는지 확인

 

  • 문자열 : "$100. . 한. $20.0. ^^$";

6. $로 시작하는 문자열

 

7. $로 끝나는 문자열

8. .문자가 있는 것을 찾아서 리턴

9. .이 4개 - 4글자씩 잘라서 리턴

10. .과 . 사이의 한글자가 있는 문자열 

package pattern.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternTest02 {
	public static void main(String[] args) {
		String str = "ja1111aCva--@@-@@@@- 한글 --@@@@-- progra44568EmgFmiJng";
//		String str = "amJAVA _java aaaxl  programming and spring , hadoop";
//		String patternStr = "a|m|g"; // 1. | 는 or을 의미 a이거나 m이거나 g인 문자열 추출
//		String patternStr = "[amg]"; // 2. []는 문자열의 집합이나 범위를 표현
									//		문자와 문자 사이를 나타내려면 -을 사용
									//		[]안에서 ^는 부정의 의미로 해석
//		String patternStr = "[amg][ma]"; // 3. 두 글자를 추출
										//		첫 글자가 a|m|g 이고
										//		두 번째 글자가  m|a인 문자열
										//		-> am, aa, mm, ma, gm, ga
//		String patternStr = "[c-j]";	// 4. 소문자 c에서 j사이에 해당하는 문자
//		String patternStr = "[C-J]";	// 5. 대문자 C에서 J사이에 해당하는 문자
//		String patternStr = "[C-Jc-j]";	// 6. 대문자, 소문자  c에서 j사이에 해당하는 문자 
//		String patternStr = "[4-8]"; // 7. 4에서 8사이 숫자
//		String patternStr = "[^4-8]"; // 8. 4에서 8사이 숫자가 아닌 모든 문자
//		String patternStr = "[^c-j]"; // 9. c에서 j사이의 문자열이 아닌 문자 
//		String patternStr = "[A-za-z0-9]"; // 10. 영문자와 숫자만 추출
//		String patternStr = "[^A-za-z0-9]"; // 11. 영문자, 숫자를 제외한 문자 
		String patternStr = "[가-힣]"; // 12. 한글만 추출
		equalsPattern(str, patternStr); 
	}
	public static void equalsPattern(String str, String patternStr) {
		Pattern pattern = Pattern.compile(patternStr);
		Matcher m = pattern.matcher(str); 
		
		while (m.find()) {
			System.out.println(m.group());
			System.out.println(m.start() + ":" + (m.end() - 1));
		}
		
	}
}
  • 문자열

String str = "amJAVA _java aaaxl  programming and spring , hadoop";

 

  1. | 는 or을 의미 a이거나 m이거나 g인 문자열 추출

String patternStr = "a|m|g"; // 1. | 는 or을 의미 a이거나 m이거나 g인 문자열 추출

2. []는 문자열의 집합이나 범위를 표현

String patternStr = "[amg]"; // 2. []는 문자열의 집합이나 범위를 표현

3. 첫 글자가 a|m|g 이고 두 번째 글자가 m|a인 문자열

String patternStr = "[amg][ma]";

4. 소문자 c에서 j사이에 해당하는 문자

String patternStr = "[c-j]";

5. 대문자 C서 J사이에 해당하는 문자

String patternStr = "[C-J]";

6. 대문자, 소문자 c에서 j사이에 해당하는 문자

String patternStr = "[C-Jc-j]";

  • 문자열

String str = "ja1111aCva--@@-@@@@- 한글 --@@@@-- progra44568EmgFmiJng";

7. 4에서 8사이 숫자

String patternStr = "[4-8]";

8. 4에서 8사이 숫자가 아닌 모든 문자

String patternStr = "[^4-8]";	

9. c에서 j사이의 문자열이 아닌 문자

String patternStr = "[^4-8]";

10. 영문자와 숫자만 추출

String patternStr = "[A-za-z0-9]";

11. 영문자, 숫자를 제외한 문자

String patternStr = "[^A-za-z0-9]";

12. 한글만 추출

String patternStr = "[가-힣]";

  • 수량체크를 하기 위한 패턴기호
    • \* : *앞의 문자나 기호를 0~N 개 추출

    • \+ : + 앞의 문자나 기호를 1~N 개 추출

    • ? : ? 앞의 문자나 기호를 0~1개 추출

    • {n} : n개

    • {n, m} : n이상 m이하

    • {n,} : n이상

package pattern.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternTest03 {
	public static void main(String[] args) {
//		String str = "ja1111aCva--@@-@@@@- 한글 --@@@@-- progra44568-@Emg-Fm-@i-Jng";
		String str = "amJAVA _java aaaxl  programming and spring , hadoop";
//		String patternStr = "-@*-"; // 1. -- 사이에 @만 0~N개
//		String patternStr = "-@+-"; // 2. -- 사이에 @만 1~N개
//		String patternStr = "-@?-"; // 3. -- 사이에 @만 0~1개
//		String patternStr = "[^ ]"; // 4. 공백이 아닌 모든 문자
//		String patternStr = "[amv]{1,3}"; // 5. amv에 해당하는 문자열
										//	[amv],[amv][amv],[amv][amv][amv] 와 같다
//		String patternStr = ".{5}"; // 6. 5자리씩 출력
//		String patternStr = "[a-z]{3,}"; // 7. 영문 소문자가 3자리 이상인 문자열
//		String patternStr = "[A-z]{3,}"; // 8. 영문 대,소문자가 3자리 이상인 문자열
//		String patternStr = "\\w"; // 9. 영문자 대소문자, 숫자 모두 추출, _
//		String patternStr = "\\W"; // 10. \\w의 반대 문자열 추출
//		String patternStr = "\\d"; // 11. 숫자만 추출
		String patternStr = "\\D"; // 12. 숫자를 제외한 나머지 (\\d의 반대)
		equalsPattern(str, patternStr); 
	}
	public static void equalsPattern(String str, String patternStr) {
		Pattern pattern = Pattern.compile(patternStr);
		Matcher m = pattern.matcher(str); 
		
		while (m.find()) {
			System.out.println(m.group());
			System.out.println(m.start() + ":" + (m.end() - 1));
		}
		
	}
}
  • 문자열

String str = "ja1111aCva--@@-@@@@- 한글 --@@@@-- progra44568-@Emg-Fm-@i-Jng";

1. -- 사이에 @만 0~N개

String patternStr = "-@*-"; // -- 사이에 @만 0~N개 

2. -- 사이에 @만 1~N개

String patternStr = "-@+-"; // 2. -- 사이에 @만 1~N개

3. -- 사이에 @만 0~1개

String patternStr = "-@?-"; // 3. -- 사이에 @만 0~1개

4. 공백이 아닌 모든 문자

String patternStr = "[^ ]"; // 4. 공백이 아닌 모든 문자

5. amv에 해당하는 문자열 : [amv],[amv][amv],[amv][amv][amv] 와 같다

String patternStr = "[amv]{1,3}";

6. 5자리씩 출력

String patternStr = ".{5}";

7. 영문 소문자가 3자리 이상인 문자열

String patternStr = "[a-z]{3,}"; // 7. 영문 소문자가 3자리 이상인 문자열

8. 영문 대,소문자가 3자리 이상인 문자열

String patternStr = "[A-z]{3,}"; // 8. 영문 대,소문자가 3자리 이상인 문자열

9. 영문자 대소문자, 숫자, _ 추출

String patternStr = "\\w";

10. \\w의 반대 문자열 추출

String patternStr = "\\W";

11. 숫자만 추출

String patternStr = "\\d";

12. 숫자를 제외한 나머지

String patternStr = "\\D"; // 12. 숫자를 제외한 나머지 (\\d의 반대)

package pattern.test;

import java.util.regex.Pattern;

public class PatternAPITest02 {
	public static void main(String[] args) {
		System.out.println(Pattern.matches("[0-9]+", "1234java"));
		System.out.println(Pattern.matches("[0-9]+", "java"));
		System.out.println(Pattern.matches("[0-9]+", "1234"));
		System.out.println(Pattern.matches("[0-9]+", "1"));
		System.out.println(Pattern.matches("[0-9]+", ""));
	}
}

package pattern.test;

import java.util.regex.Pattern;

public class PatternAPITest02 {
	public static void main(String[] args) {
		System.out.println(Pattern.matches("[0-9A-z]+", "1234java"));
		System.out.println(Pattern.matches("[0-9A-z]+", "java"));
		System.out.println(Pattern.matches("[0-9A-z]+", "1234"));
		System.out.println(Pattern.matches("[0-9A-z]+", "1"));
		System.out.println(Pattern.matches("[0-9A-z]+", ""));
	}
}

'JAVA' 카테고리의 다른 글

Modern Java - Lambda, Stream  (0) 2020.10.22
JAVA 설치 및 환경변수 설정  (0) 2020.05.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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 27 28 29 30 31
글 보관함