FIF's 코딩팩토리

자바 기초 NCS교육과정(25)-정규식 본문

Back-End/국비 NCS교과과정

자바 기초 NCS교육과정(25)-정규식

FIF 2019. 7. 31. 14:21
반응형

정규식(Regular Expression)
   정규식이란 텍스트 데이터 중에서 원하는 조건(패턴)과 일치하는 문자열을 찾아내기 위해
 

   사용하는 것으로 미리 정의된 기호와 문자를 이용해서 작성한 문자열을 말한다.

 

 

Java124_RegEx.java

public class Java124_RegEx {

	public static void main(String[] args) {
		String sn="java korea";
		String sg="";
		String st="java     korea";
		//j_v_ ko_e_
		for(int i=0;i<sn.length();i++) {
			if(sn.charAt(i)=='a' || sn.charAt(i)=='r') 
				sg+='_';//문자열로 바뀜
			else
				sg+=sn.charAt(i);
		}
		System.out.println(sg);
		
		System.out.println("regular expression을 이용한 문자변경");
		//[]대괄호는 or를 의미한다.
		//sn변수에 저장된 문자열에서 a이거나r이면 "_"로 변경한다.
		System.out.println(sn.replaceAll("[ar]"/*or의미*/, "_"));
		//sn변수에 저장된 문자열에서 a이거나 r이 포함되면 true 아니면 false을 리턴한다 
		System.out.println(sn.matches(".*[vr].*"));// .임의의 문자 *여러개 []는 or의 의미
		//sn변수에 저장된 문자열에서 a이거나 r로 시작되면 true 아니면 false을 리턴한다
		System.out.println(sn.matches("[ar].*"));//false
		//sn변수에 저장된 문자열에서 a이거나 r로 끝나면 true 아니면 false을 리턴한다
		System.out.println(sn.matches(".*[ar]"));//true
		//{2,3}2개부터 3개까지의 공백을"@"으로 변경한다.
		System.out.println(st.replaceAll("\\s{2,3}", "@"));// \s(공백)이 {2,3}2개이거나 3개이면 {2,}(2개이상이면)

	}
}	

출력결과

 

Java125_RegEx.java

public class Java125_RegEx {

	public static void main(String[] args) {
		String sn = "1a234";
		String sb = "2net5";
		String st = "aetwefgcc";
		
		//a-zA-Z_*$가 sn변수에 포함이 되어있으면 true, 아니면 false을 리턴한다
		System.out.println(sn.matches(".*[a-zA-Z_*$].*"));
		
		//sn변수에 0-9가 포함되어있으면 true 아니면 false을 리턴한다.
		System.out.println(sn.matches(".*[0-9].*"));
		System.out.println(sn.matches(".*\\d.*"));
		
		//sb변수에 저장된 값이 2로 시작되면 true 아니면 false을 리턴한다.
		System.out.println(sb.matches("2.*"));
		
		//sb변수에 저장된 값이 2로 시작해서 5로 끝나면 true 아니면 false을 리턴한다.
		System.out.println(sb.matches("2.*5"));
		
		System.out.println(sb.matches("[ab].{5,}"));
		
		//st변수에 저장된 문자열이 a또는 b로 시작하고 cc로 끝나면서 
		// 사이에는 임의의문자 최소1개에서5개를 포함한다.
		System.out.println(st.matches("[ab].{1,5}cc"));
	}

}

출력결과

 

Java126_RegEx.java

 

정상적으로 주민번호가 입력이 되었으면 true을 반환하고 아니면
  false을 반환하는 프로그램을 구현하시오.
   
  [출력결과]
  851306-2689540 승인이 되었습니다.
  750625-16843 다시 입력하세요.

 

public class Java126_RegEx {

	public static void main(String[] args) {
		System.out.print("851306-2689540");
		display(process("851306-2689540"));

		System.out.print("750625-16843");
		display(process("750625-16843"));

	}//end main()
	
	public static boolean process(String sn) {
		// 여기를 구현하세요.
		return sn.matches("\\d{6}-\\d{7}");
	}//end process()
	
	public static void display(boolean res) {
		if (res) {
			System.out.println(" 승인이 완료되었습니다.");
		} else {
			System.out.println(" 다시 입력하세요.");
		}
	}// end display()

}//end class

출력결과

 

Java127_RegEx.java

 

data변수에 저장된 값이 아래와 같이 출력이 되도록 process메소드를 구현하시오.


  [출력결과]
   java
   jsp
   spring

 

public class Java127_RegEx {

	public static void main(String[] args) {
		String data="java/jsp:spring";
        process(data);
	}//end main()
	
	public static void process(String data) {
		//여기에  구현하시오.
		String[] arr=data.split("[/:]");
		for(String alpa:arr)
			System.out.println(alpa);
		
		System.out.println(data.replaceAll("[/:]","\n"));
		
		
	}//end process()

}//end class

출력결과

 

  Pattern.matcher() : 빠르게 어떠한 text(String)이 주어진 Pattern에
           있는지를 확인한다.


  Pattern.comile(): 여러개의 텍스트를 재사용 가능한 Pattern 
           인스턴스로 컴파일 한다.


  find() : 최초의 패턴 위치로 이동한 뒤 True 반환, 없으면 false 


  find(int start) : start 위치 부터 find 


  start() : 매칭되는 패턴의 시작 인덱스 반환 


  start(int group) : group이 매칭되는 시작 인덱스 반환


  end() : 매칭된 패턴 한칸 뒤 인덱스 반환 


  end(int group) : 지정되 그룹이 매칭되는 한칸 뒤 인덱스 반환 


  group() : 최초로 그룹 매칭된 패턴을 반환 group(int group) : 그룹 매칭된 부분중 

  group번째 패턴을 반환 


  groupCount() : 패턴내 그룹핑(괄호로 묶은 패턴들)의 갯수 반환


  matches() : 패턴이 전체 문자열과 일치하면 True

 

Java128_RegEx.java

public class Java128_RegEx {

	public static void main(String[] args) {
		String input1 = "wodkwodk";
		String input2 = "maaa3aaaaa";
		String input3 = "252";
		// \\w : 영문자, 숫자   [0-9a-zA-Z]
		System.out.println(input1.matches(".*[\\w].*"));		
		System.out.println(Pattern.compile("[\\d]").matcher(input1).find());
		
		/*Pattern pn = Pattern.compile("[a-zA-Z]");
		Matcher ce=pn.matcher(input1);
		boolean res=ce.find();
		System.out.println(res);*/
		
        System.out.println(Pattern.compile("[a-zA-Z]").matcher(input1).find());
		
		System.out.println(input1.matches("[\\w]{5,10}")
				 && input1.matches(".*\\d.*") 
				 && input1.matches(".*[a-zA-Z].*"));
		
		Pattern pn1=Pattern.compile("[\\d]");
		Pattern pn2=Pattern.compile("[a-zA-Z]");
		
		
		
		System.out.println(input1.matches("[\\w]{5,10}") && pn1.matcher(input1).find()
				&& pn2.matcher(input1).find());
		
		
		System.out.println(input2.matches("[\\w]{5,10}")
				&& pn1.matcher(input2).find()
				&& pn2.matcher(input2).find());
		
		System.out.println(input3.matches("[\\w]{5,10}") 
		        && pn1.matcher(input3).find()
				&& pn2.matcher(input3).find());
		
		 
		
	}//end main()

}//end class

출력결과

반응형
Comments