정규표현식 실습
안녕하세요 강사님.
정규표현식 실습 강의에서 궁금한 점이 있습니다.
한글만 가능하도록 정규표현식을 작성하는 것을 "^[가-힣]+$" 라고 말씀해주셨습니다.
궁금한 점은 "[가-힣]+" 라고 작성하면 한글 외의 글자가 들어와도 true라고 반환하는 케이스가 어느 경우인지 입니다.
"[가-힣]+" 라고 작성해도 띄어쓰기와 ""일때도 모두 false를 반환합니다.
즉, "^[가-힣]+$" 대신에 "[가-힣]+" 라고 할 경우 어떠한 케이스들을 걸러내지 못하는지 궁금합니다.
감사합니다.
답변 1
1
결론 부터 말씀드리면, 정규표현식은 서로 다르지만, matches 메서드 때문에 동일하게 보이는 것입니다.
정규표현식
^[가-힣]+$: 이 패턴은 문자열의 시작(^)부터 끝($)까지 한글 문자(가-힣)로만 이루어져 있어야 합니다. 문자열 내에 다른 문자가 있으면 패턴에 일치하지 않습니다.[가-힣]+: 이 패턴은 문자열에 한글 문자(가-힣)가 하나 이상 연속해서 나타나는 경우에 패턴에 일치합니다. 문자열 내에 다른 문자가 있어도, 한글 문자가 하나 이상 있으면 일치합니다.
matches 메서드
Pattern.matches()메서드를 사용할 때, 두 패턴은 다른 결과를 반환할 수 있습니다.예를 들어, "안녕하세요abc"라는 문자열에 대해 테스트한다면:
^[가-힣]+$패턴은 일치하지 않습니다. 왜냐하면 문자열이 영어 문자(abc)를 포함하고 있기 때문입니다.[가-힣]+패턴은Pattern.matches()메서드와 함께 사용되면 일치하지 않습니다. 왜냐하면Pattern.matches()는 전체 문자열이 패턴과 일치해야 true를 반환하기 때문입니다. 하지만, 다른 메서드를 사용하면 일치한다고 판단할 수 있습니다. 예를 들어,Matcher.find()를 사용하면 문자열 내에 한글 문자가 하나 이상 있으면 true를 반환합니다.
public class HelloTest {
@Test
public void ko_test(){
String pattern = "^[가-힣]+$";
String str = "안녕하세요abc";
boolean result = Pattern.compile(pattern).matcher(str).find();
System.out.println(result); // false
}
@Test
public void ko2_test(){
String pattern = "[가-힣]+";
String str = "안녕하세요abc";
boolean result = Pattern.compile(pattern).matcher(str).find();
System.out.println(result); // true
}
}자바의 정규표현식 검사 라이브러리
Validation 라이브러리는 주로 전체 문자열이 패턴과 완전히 일치하는지 검사하는 방식에 가깝습니다. 즉, Pattern.matches()와 유사한 방식으로 작동합니다.
import javax.validation.constraints.Pattern
요청/응답 DTO 관련 문의
0
170
2
안녕하세요 인증이 필요한 url을 위하여 /s를 붙이는것에 대해 질문있습니다.
0
161
1
validation aop사용에 대해서 질문있습니다.
0
245
2
Dummy 클래스 위치에 대한 질문
0
293
2
테스트 방식에 관해서 질문이 있어요
0
292
2
스프링 버전업일 경우에는 Pointcut @PostMapping 조건이 달라질까요?
1
434
1
equals와 longValue 관련 질문드립니다
0
328
1
계좌번호를 Long 타입으로 하는 이유가 무엇일까요?!
0
499
2
[정보공유] Hibernate 로그 작동 안하시는 분들!!
3
346
0
UserControllerTest 테스트 실패 문의
0
318
1
스프링 시큐리티 6.2 버전 이후로 apply() 메서드를 이용한 JwtAuthenticationFilter 가 등록이 안됩니다.
2
1106
1
import 오류
0
426
3
spring initializer gradle 에서 3.x.x 대 밖에 없어요. 2.x.x는 보이지 않는데 어떡하져
0
438
2
안녕하세요 로그엔 성공적으로 들어온것같습니다..
0
237
1
JwtAuthorizationfilter test mvc.performget 관련 질문입니다!
0
286
1
JwtAuthorizationfilter test mvc.performget 부
0
226
1
longValue() 질문
0
228
1
jwt 인가필터 규현및 등록
0
334
1
스프링부트 3버전
1
334
1
권한처리를 위한 세션강제주입
0
418
1
JwtVO 를 인터페이스로 만든 이유
0
359
1
계좌 조회 질문드립니다
0
229
1
DummyObject 에 대하여
0
308
2
DTO를 이너클래스로 계속추가하는 이유
0
695
2





