본문 바로가기
Web Development/Java

[Java / Javascript] '(1)' 숫자 괄호, 소수점 등의 형태 찾기(패턴 검색)를 통한 정규식 정복하기(Java와 Javascript 차이)

by 감자맹고우 2022. 3. 3.
728x90
반응형

프로젝트를 진행하다보면 검색, 예외처리 등 각종 기능을 구현할 때마다 정규식은 빠질래야 빠질 수 없는 존재인 것 같다. 하지만 의도한 정규식을 한 번에 바로 작성해내는 것은 정말 쉬운 일이 아닌 것 같다.

그래서 오늘도 원했던 정규식을 구글링을 통해 해결했고, 해결해나가면서 알게되었던 내용을 정리 겸 공유하고자 한다.

 

정규식이 어떤 것인지는 이미 곳곳에 많은 설명이 있기에 각설하고, 바로 실무적인 내용만 다루겠다.

 

 

[ 참고 이미지 ]

정규식(Regex)

- 정규식 참고 주소 : https://hamait.tistory.com/342

 

정규식 코드를 작성하는데 가장 큰 도움이 되었던 내용이다.

정규식을 구성하는 각 부분에 대한 설명이 나와있기에, 하나씩 참고하여 정규식을 작성해보면서 이해를 넓힐 수 있었다.

 

특히 정규식에서 ^, $, [], \, + 의 의미가 무엇인지 이해하게 된 점이 매우 중요했다.

 

 

[ 해결 방법 ]

 

이제 본격적으로 특정 패턴의 정규식을 작성해보자.

프로젝트에서 내가 필요로 했던 정규식 패턴은 다음과 같다.

 

1. 소수점
2. (1), (2), (3)과 같은 형태의 괄호와 숫자 구성

 

어려운 형태는 아니지만 막상 작성하려니 어려웠다. 그렇기때문에 정리할 필요성을 느끼게 된 것 같다...

아무튼, 소수점은 다음과 같이 작성할 수 있다.

 

 

1. 소수점 형태 예시

/[\-0-9]+\.[0-9]+/g

우선 []는 정확하진 않겠지만 optional의 의미로 작성했다.

-나 .를 그대로 작성했을 때는 기호 자체로서가 아닌 다른 의미로 처리하기 때문에, \를 앞에 붙여 작성하였다.

+는 앞의 형태가 1회 혹은 그 이상 반복해서 나올 수 있다는 의미로 작성했다.

 

그래서, 앞의 정규식의 뜻은 다음과 같다.

-와 0~9가 여러 번 나올 수 있으며 소수점 뒤에는 0~9가 다시 여러번 나올 수 있다.

모든 조건을 만족하는 정규식은 아니지만, 최소한의 조건은 만족하는 것으로 보인다.

 

 

제한을 더 풀어, 정수형까지 나올 수 있도록 하려면 아래와 같이도 작성할 수 있다.

/[\-0-9\.]+/g

이 정규식은 -, 숫자, .만 허용하는 의미로,

이렇게 글자에 기본적인 제한을 준 다음, split 등의 내장함수를 통해 코드로 조건을 보강하여 작성하면, 보다 확실한 조건으로 처리할 수 있다. 이 글에서는 정규식 내용을 중심으로 다루기에 코드는 생략하였다.

 

 

2. 괄호 숫자형 예시

/\([0-9]+\)/g

괄호 숫자형은 optional이 아니라 모두 필수이다.

다만, 괄호안의 숫자만 변경되기 때문에, 숫자만 선택적으로 처리해주면 된다.

그렇기 때문에 \(, \)로 괄호를 정규식에 고정하였고, [0-9]+ 로 숫자의 갯수와 변경만을 처리해주었다.

 

▼▼▼ 아래는 정규식 테스트 작성 사이트입니다. 테스트케이스를 직접 설정하고 정규식을 작성해볼 수 있어 매우 유용합니다.

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

 

 

반응형

 

[ 코드 적용 방법 ]

 

이제, 정규식은 다 작성했다.

그러나, Java나 Javascript처럼 다른 언어로 코드를 작성할 때는, 정규식 사용에 다소 차이가 있다.

 

가장 중요한 부분은, \의 사용이다.

- Javascript에서는 \를 사용할 때, 보통의 정규식처럼 \ 한번만 작성하면 된다.

- Java에서는 \를 사용할 때, \\ 두 번 작성해야 한다.

 

그렇지 않으면, 해당 코드에 빨간 줄로 다음과 같은 에러가 출력될 것이다.

Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )

그러니 이 에러를 만났을 때는, \를 꼭 2번 작성하도록 하자!

 

 

◆ 코드 예제

<!-- Javascript -->
const regExp = /^[\-0-9\.]+$/;
console.log( regExp.test("0.324") );

<!-- Java -->
String str = "(1)안녕하세요(2)반갑습니다";
String[] split = str.split( "\\([0-9]+\\)" );
String result = "";
for(int i = 0; i < split.length; i++){
    result += split[i] + " ";
}
System.out.println(result);

 

위와 같이 코드를 작성하여 정규식이 제대로 작성되었음을 확인할 수 있다!

 

🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱‍🏍

 

728x90
반응형

댓글