평범한 연구소

[JAVA] 정규식 본문

JAVA/기본 개념

[JAVA] 정규식

soyeonisgood 2022. 7. 21. 10:47

정규식

  • [0-9A-Za-z] == \\w : 영숫자 
  • [대한0-9A-Za-z]: 대,한,숫자,영문자 제외 (한글자 한글자 의미)
  • \\w|대한: 대한과 영숫제 제외 ("대한" 문자열 의미)
  • \\d: 숫자
  • \\s: 공백(엔터,탭 포함)
  • \\w: 영숫자
  • \\W: 영숫자 제외
  • \\d | \\s: 숫자 또는 공백
  • [0-9]: 0~9사이의 숫자
  • [0-9A-Za-z]: 대소문자, 숫자
  • \\w|대한: 영숫자와 "대한"
  • [대한0-9A-Za-z]: '대','한',영숫자
  • \\d{1,3}: 1~3자 이내의 숫자
  • ^:시작 $:마지막 +:하나이상
  • 대괄호 안 [^]:부정. ^:시작과 다름.

 

  • s.replaceAll(a, b): 문자열a를 b로 변경. 정규식 사용 가능.
  •  - s1.replaceAll("\\d|\\s", ""): 숫자 또는 공백 제거
  • s.matches(p): p(정규식 패턴 담긴 문자열) 일치하면 true 반환

 

 

정규식 활용 예제

package ch07.unit4;

public class Ex05 {

	public static void main(String[] args) {
		String s1 = "seoul korea";
		String s2;
		int n;
		
		// indexOf(): 특정 문자나 문자열이 몇번째 인덱스에 존재하는지 반환. 없으면 -1.
		n = s1.indexOf("seo");
		System.out.println(n);  // 0
		
		n = s1.indexOf("KOR");
		System.out.println(n);  // -1
		
		n = s1.indexOf("ko");
		System.out.println(n); // 6
		
		n = s1.indexOf("o");
		System.out.println(n); // 2
		
		n = s1.indexOf("o", 3); // 3인덱스(u) 부터 검색
		System.out.println(n); // 7
		 
		n = s1.lastIndexOf("o");
		System.out.println(n);
		
		s1="test.jpg";
		s2 = s1.substring(s1.lastIndexOf(".")+1); // 파일에서 확장자만 추출
		System.out.println(s2); //jpg
		
		s1="우리나라 대한민국 대한민국 만세";
		s2 = s1.replace("대한", "大韓"); // 모든 대한을 한문으로 변경. 정규식 사용 불가
		System.out.println(s2);
		
		s1="우리나라 대한민국 대한민국 만세";
		s2 = s1.replaceAll("대한", "大韓"); // 모든 대한을 한문으로 변경. 정규식 사용 가능
		System.out.println(s2);
		
		s1="우리 123 나라 456 대한";
		// 정규식 패턴-> \\d:숫자, \\s:공백(엔터,탭 포함), |:또는
		s2 = s1.replaceAll("\\d", ""); // 숫자 제거
		System.out.println(s2);
		
		// [0-9]: 숫자
		s2 = s1.replaceAll("[2-5]", ""); // 2~5 사이의 숫자 제거
		System.out.println(s2);
		
		s1 = "우리12나라 ab대한XY민국 한국"; // 
		s2 = s1.replaceAll("[0-9A-Za-z]", ""); //영문자(대소문자), 숫자 제거
		System.out.println(s2);
		
		s2 = s1.replaceAll("\\w", ""); // \\w: 영숫자
		System.out.println(s2);
		
		s2 = s1.replaceAll("\\W", ""); // \\W: 영숫자 제외
		System.out.println(s2);
		
		// 영문자, 숫자, 대한 제거
		s2 = s1.replaceAll("\\w|대한",""); // 우리나라 민국 한국
		System.out.println(s2);
		
		// []는 안에 있는 한글자 한글자 의미. 
		s2 = s1.replaceAll("[대한0-9A-Za-z]",""); // 우리나라 민국 국
		System.out.println(s2);
		
		
		
		
	}

}
package ch07.unit4;

public class Ex06 {

	public static void main(String[] args) {
		String s, p;
		boolean b;
		
		// 1~3자 이내의 숫자인지 검사
		p = "\\d{1,3}";
		s = "12";
		b = s.matches(p); // 정규식 패턴에 일치하면 true
		System.out.println(b);
		
		s = "1234";
		System.out.println(s.matches(p)); // false
		
		// ^:시작 $:마지막 +:하나이상
		p = "^[가-힣]+$";  // 닉네임 검증 형식
		s = "홍ㅋ나";
		System.out.println(s.matches(p)); // false. 
		
		s = "홍길동";
		System.out.println(s.matches(p)); // true

		p = "010-\\d{4}-\\d{4}"; // 전화번호 검증 형식
		s = "010-1111-1111";
		System.out.println(s.matches(p)); //true
		
		// 숫자가 아닌 것은 *로 치환
		s = "우리 12 abc 67 & 79";
		s = s.replaceAll("[^0-9]", "*"); // 대괄호 안 [^]:부정. ^:시작과 다름.
		System.out.println(s);
	}

}