은은하게 코드 뿌시기

자바 JAVA 정규표현식 본문

자바/자바 기본

자바 JAVA 정규표현식

은은하게미친자 2022. 6. 15. 13:05
728x90

* 숫자만 허용
import java.util.Scanner;
import java.util.regex.Matcher; // 정규표현식을 위해 import
import java.util.regex.Pattern; // 정규표현식을 위해 import
public class OnlyInteger {

 public static void main(String[] args) {

 //숫자를 허용하는 패턴
 Pattern p = Pattern.compile("(^[0-9]*$)");

 int onlyNum;
 String inputVal;
 Scanner iStream = new Scanner(System.in);

 inputVal = iStream.nextLine();
 Matcher m = p.matcher(inputVal); //선언한 패턴 p에 맞는 조건인지

 if(m.find()) // m.find() 패턴이 일치하는 경우 true리턴
 {
 onlyNum = Integer.parseInt(inputVal);
 System.out.println(onlyNum);
 }
 else
 {
 System.out.println("숫자가 아닌데..?");
 }
 }
}
pattern : "^[0-9]*$"
^ 으로 우선 패턴의 시작을 알립니다.
[0-9] 괄호사이에 두 숫자를 넣어 범위를 지정해줄 수 있습니다. * 를 넣으면 글자 수를 상관하지 않고 검사합니다. $ 으로 패턴의 종료를 알립니다.

 

 

[자주 쓰이는 패턴1]
1) 숫자만 : ^[0-9]*$
2) 영문자만 : ^[a-zA-Z]*$
3) 한글만 : ^[가-힣]*$
4) 영어 & 숫자만 : ^[a-zA-Z0-9]*$
5) E-Mail : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$
6) 휴대폰 : ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$
7) 일반전화 : ^\d{2.3} - \d{3,4} - \d{4}$
8) 주민등록번호 : \d{6} \- [1-4]\d{6}
9) IP 주소 : ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3})

10)양의정수 : ^\d+$

11)음의정수 : ^-\d+$

12)정수: ^-?\d+$

13)양수 : ^\d*\.?\d+$

14)양수 또는 음수 : ^-?\d*\.{0,1}\d+$ 또는

(^-?0\.[0-9]*[1-9]+[0-9]*$)|(^-?[1-9]+[0-9]*((\.[0-9]*[1-9]+[0-9]*$)|(\.[0-9]+)))|(^-?[1-9]+[0-9]*$)|(^0$){1}

15)전화번호: ^\+?[\d\s]{3,}$

16)코드가있는전화 : ^\+?[\d\s]+\(?[\d\s]{10,}$

17)1900-2099년: ^(19|20)[\d]{2,2}$

18)날짜 (dd mm yyyy, d / m / yyyy 등) : ^([1-9]|0[1-9]|[12][0-9]|3[01])\D([1-9]|0[1-9]|1[012])\D(19[0-9][0-9]|20[0-9][0-9])$

19)ipv4 : ^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]){3}$

 

 

* 파일확장자

String pattern = "^\\S+.(?i)(txt|pdf|hwp|xls)$";
 String input = "abc.txt";

 boolean i = Pattern.matches(pattern, input);
 if(i==true)
 {
 System.out.println(input+"는 패턴에 일치함.");
 }
 else
 {
 System.out.println("패턴 일치하지 않음.");
 }

 

패턴분석
^\\S+.(?i)(txt|pdf|hwp|xls)$
^ : 시작
\ : \ 가 왔기 때문에 다음에 올 문자는 특수문자로 취급하고 , \다음 특수문자고 오면 그 자체로 취급. \S : 공백 아닌 문자
+. : .이 반드시 한개는 와야한다.
(?i) : 대소문자 구별하지 않음.
(txt|pdf|hwp|xls) : txt 혹은 pdf 혹은 hwp 혹은 xls 만 허용. | 을 이용한 or 연산!
$ : 끝
-> 공백아닌 문자와 .이 반드시 와야하고 뒤에는 txt, pdf, hwp, xls 만 허용.

 

 

*패턴을 계속 만들어내는 것은 자원낭비가 심하다

그러므로 static으로 한번만 만들게 해놓고 재활용해 사용한다.

 

private static final Pattern GET_NUMBER = Pattern.compile("[0-9]+");
private static final Pattern IS_ONLY_NUMBER = Pattern.compile("^[0-9]*?");

 

public boolean isOnlyNumber(final String str) {
        return IS_ONLY_NUMBER.matcher(str).matches();
}

 

 

참고링크

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions

 

정규 표현식 - JavaScript | MDN

정규 표현식, 또는 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴입니다. JavaScript에서는 정규 표현식도 객체로서, RegExp의 exec()와 test() 메서드를 사용할 수 있습니다. String의 match(), matchA

developer.mozilla.org

 

728x90
Comments