HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤩
개발
/
Java
Java
/
💯
Java 기본
/활용 (API)/
Regex

Regex

정규표현식 기초

기본적 일치

. : 모든 문자 하나와 일치
\d : 모든 한자리 숫자와 일치
\w : 모든 글자, 숫자, 밑줄(_)과 일치
\s : 공백과 일치
^: not 의 의미

Java regex 사용방법

Pattern pattern = Pattern.compile("w3schools", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher("Visit W3Schools!"); boolean matchFound = matcher.find(); if(matchFound) { System.out.println("Match found"); } else { System.out.println("Match not found"); } } Pattenr pattern = Pattern.compile("\\{\\w+\\}"); Matcher matcher = pattern.matcher("{bcrypt}$2a$10$7NfCgNeVYE2D1GyJ0rjIHuNjPlqVD6EsYYAZ.qwefgjVZSbCaItAq"); matcher.matches() // -> false 앞 부분만 매치되어서 전체 문자열과 매칭되지는 않기에
  1. Pattern 객체를 만듦
  1. Matcher matcher = Pattern 객체.matcher(타겟 스트링)
  1. matcher.find() — 해당 패턴이 있는 부분이 있느냐?
      • Attempts to find the next subsequence of the input sequence that matches the pattern.
  1. matcher.group() — 매치된 부분 뽑아내기 ( matcher.find() 호출 후 호출해야 함)
  • matcher.matches() → 해당 패턴이 스트링과 완전히 동일해야함. 부분 매칭되는건 적용 안됨
@Test void test() { String msg = "Validation failed for argument [2] in public com.example.springtodo.controller.ApiResponse<com.example.springtodo.controller.dto.TodoItemResponse> " + "com.example.springtodo.controller.TodoController.updateItem(java.lang.String,java.lang.Integer,com.example.springtodo.controller.dto.TodoItemUpdateRequest): " + "[Field error in object 'todoItemUpdateRequest' on field 'title': rejected value []; codes " + "[NotBlank.todoItemUpdateRequest.title,NotBlank.title,NotBlank.java.lang.String,NotBlank]; " + "arguments [org.springframework.context.support.DefaultMessageSourceResolvable: " + "codes [todoItemUpdateRequest.title,title]; arguments []; default message [title]]; default message [내용은 비어있을 수 없습니다]] "; Pattern pattern = Pattern.compile("(default message \\[[\\w\\s가-힣]*\\])"); Matcher matcher = pattern.matcher(msg); if (matcher.find()) { System.out.println(matcher.group()); // default message [title] } if (matcher.find()) { System.out.println(matcher.group()); // default message [내용은 비어있을 수 없습니다] } Pattern pattern = Pattern.compile("(default message \\[[\\w\\s가-힣]*]]\\s$)"); Matcher matcher = pattern.matcher(msg); if (matcher.find()) { System.out.println(matcher.group()); // default message [내용은 비어있을 수 없습니다]] } }

Capture Group

Pattern EMAIL_PATTERN = Pattern.compile( "^([\\w-.]{1,30})@([\\w-]+\\.)+[\\w-]{2,4}$"); @Test void regexTest() { Pattern pattern = Regex.EMAIL_PATTERN; String email = "rlfrmsdh1@gmaill.com"; Matcher matcher = Regex.EMAIL_PATTERN.matcher(email); if(matcher.find()) { String group = matcher.group(0); System.out.println(group); // rlfrmsdh1@gmail.com String group = matcher.group(1); System.out.println(group); // rlfrmsdh1 String group2 = matcher.group(2); System.out.println(group2); // gmail. } }
  • 전체 regex 형태에 대해 매칭하는 문자열을 찾고
  • regex 중에 괄호로 표기된 부분이 Capture group 이고, 해당하는 Capture group 에 대한 문자열만 뽑아낼 수 있음

Regex pattern

public static final String pattern5 = "(\\w)\\1\\1\\1"; // 같은 문자, 숫자 // \\1 은 이전 capturing group에 대한 참조임 public static final String folderPattern = "/frontend/.*" // /frontend/src/adimn-app/vue/Update.vue 등 모든 문자의 0-n개와 매칭됨