기본적 일치 .
: 모든 문자 하나와 일치
\d
: 모든 한자리 숫자와 일치
\w
: 모든 글자, 숫자, 밑줄(_)과 일치
\s
: 공백과 일치
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 앞 부분만 매치되어서 전체 문자열과 매칭되지는 않기에
Pattern 객체를 만듦 Matcher matcher = Pattern 객체.matcher(타겟 스트링) matcher.find() — 해당 패턴이 있는 부분이 있느냐? Attempts to find the next subsequence of the input sequence that matches the pattern. 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개와 매칭됨