일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AWS
- 자바 스트림
- AWS ssh
- java Optional
- AWS 프로젝트 올리기
- AWS S3
- dockerfile
- AWS 키페어
- 창업형인간되기
- optional
- spring async
- vscode
- ssh
- 라이프해킹스쿨
- 스트림 예제
- 창업 마인드
- 비주얼 스튜디오 코드
- java stream
- Optional 사용법
- spring multi thread
- 창업
- 마인드
- AWS EC2
- Visual Studio Code
- AWS 프로젝트
- @async
- github CI/CD
- CI/CD
- 창업형인간
- java null 처리
- Today
- Total
Wookim
문자열에서 숫자(정수 및 유리수) 정규식 표현 본문
숫자로 이루어진 문자열를 숫자형으로 표현할 때 난감한 경우들이 있다.
"0123", "123.1230", "0123.1230", "0.001230"...
위와 같은 문자열들을 정확한 정수 혹은 유리수인지 검출하는 정규식을 작성할 것이다.
1. 정수 검출
2. 유리수 검출
와 같이 나누어서 하나 하나 살펴보고
최종 목표로 정규식 하나로 전부 검출해보자.
테스트는 위 사이트에서 해볼 수 있다.
Expression 에 정규식을 넣고
Text 에 검출하려는 문자를 넣으면 된다.
정규식에 검출되면 파란색으로 드래그처리 된다.
1. 정수 검출
^[^0]\d*
위 정규식의 의미를 살펴보자
^ : 문자열의 맨 처음 문자가
[^0] : 숫자 0이 아니고
-------------------------------------
\d : 0부터 9까지 숫자이고
* : 개수가 여러개 일때
-------------------------------------
-> 맨 처음 문자열이 0이 아닌 여러개의 숫자로 이루어진 문자열 검출
검출 예)
1234 : true
0123 : false
2. 유리수 검출 1
^[^0]\d*\.{1}\d*[^0]$
위 정규식의 의미를 살펴보자
^ : 문자열의 맨 처음 문자가
[^0] : 숫자 0이 아니고
-------------------------------------
\d : 0부터 9까지 숫자이고
* : 개수가 여러개 이고 다음에
-------------------------------------
\.{1} : 반드시 . 이 한개 있어야 하고
-------------------------------------
\d : 0부터 9까지 숫자이고
* : 개수가 여러개 이고
-------------------------------------
[^0]$ : 마지막으로 0 으로 끝나지 않는 문자를 찾아라
-> 정수 부분이 0으로 시작하지 않는 숫자이고, 소수 부분이 0으로 끝나지 않는 숫자로 이루어진 문자열 검출
검출 예)
문자열 | 결과 |
0123.123 | false |
123.1230 | false |
0123.1230 | false |
123 | false |
0.123 | false |
.123 | false |
123.123 | true |
2. 유리수 검출 2
^(0.)\d*[^0]$
위 정규식의 의미를 살펴보자
^ : 문자열의 맨 처음 문자가
(0.) : ()안의 0. 문자 조합으로 시작되어야 하고
-------------------------------------
\d : 0부터 9까지 숫자이고
* : 개수가 여러개 이고 다음에
-------------------------------------
[^0]$ : 마지막으로 0 으로 끝나지 않는 문자를 찾아라
-------------------------------------
-> 0. 으로 시작하고 0으로 끝나지 않는 유리수를 찾아라
문자열 | 결과 |
12.123 | false |
12 | false |
123.120 | false |
0.120 | false |
0.123 | true |
유리수 1과 2를 나눈 이유는 한번에 검출하기 어려워서 나누었다...
위 정규식을 한번에 합치면 정수, 유리수 모두 검출 할 수 있다.
방법은 다음과 같다.
^[^0]\d*|^[^0]\d*\.{1}\d*[^0]$|^(0.)\d*[^0]$
위 3개의 정규식을 | 으로 이어 붙이면 된다.
정규식1 | 정규식2 | 정규식3
a | b 의 의미는 a 이거나 b이면 true이다.
다만 위 정규식을 테스트 사이트에서 하면 제대로 검출이 되지 않는데,
자바 코드에서 테스트 해본결과 잘 검출 되었다.
아래 테스트 코드를 공유한다
3 java 예제
String regex = "^[^0]\\d*|^[^0]\\d*\\.{1}\\d*[^0]$|^(0.)\\d*[^0]$";
String textData = "123.123";
if(textData.matches(regex)){
System.out.println("올바른 양식");
}else{
System.out.println("숫자 형식 오류");
}