[JAVA] 정규식 사용하기

Posted by 김성철

JAVA - 정규식 사용하기

맨날 인터넷에되어있는 정규식만 퍼서 사용하다가, 직접 만들어야 할 경우가 생겨서 공부하면서 작성하였음  
아래의 블로그에 잘 정리되어있고, 이내용들을 보고서 정규식을 작성함  
처음엔 이해도안되고 짜증났는데, 하다보니 이해됨 역시  
  
https://postitforhooney.tistory.com/entry/JavaRegex-%EC%9E%90%EB%B0%94-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EA%B3%B5%EB%B6%80%ED%95%98%EA%B3%A0-%EC%98%88%EC%A0%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0  
https://moonong.tistory.com/31  
https://sas-study.tistory.com/101  
https://yulsfamily.tistory.com/232  
https://medium.com/depayse/java-%EC%A0%95%EA%B7%9C-%ED%91%9C%ED%98%84%EC%8B%9D-regular-expression-%EC%9D%98-%EC%9D%B4%ED%95%B4-31419561e4eb  
  
정규식 테스트 https://regexper.com/  
  
2022.06.17 정규식으로 특정 패턴의 문자열을 추출할때 사용, 정리해야함  
: https://boilerplate.tistory.com/53  

정규식 해석

String regexProjectSlug = "^[a-zA-Z0-9\\-]{5,10}*$";  
  
^ :  정규식 문자열 시작  
$ : 정규식 문자열 종료  
* : 앞문자가 없을수도 있고 무한정 많을 수도 있음  
[] : 정규식을 넣을 곳  
{} : 글자수 제한 ( {2,5} 2~5글자 , {8,} 8글자 이상 ,)  
() : 소괄호 안의 문자를 하나의 문자로 인식  
a-z : 영어 소문자  
A-Z : 영어 대문자  
0-9 : 숫자  
가-힣 : 한글 ( ㄱ-힣)  
| : 패턴 안에서 OR 연산 사용  
\ : 확장문자로, 역슬래시 다음에 일반 문자가 오면 특수문자로 취급함,  
	역슬래쉬 다음에 특수문자가 오면 그 문자 자체를 의미함  
\\- : 특수문자 -  
\\_ : 특수문자 _  
\\. : 특수문자 .  
\s : 공백문자  
\S : 공맥문자가 아닌 나머지 문자  
\w : 알파벳이나 숫자  
\W : 알파벳이나 숫자를 제외한 문자  
\d : 숫자 [0-9]와 동일  
\D : 숫자를 제외한 모든 문자  
(?i) : 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음  

테스트하려고 작성한 내용들

//한글 불가능영문,숫자,특수문자(-) 가능 varchar50
String regexProjectSlug = “^[a-zA-Z0-9\-]{1,50}$”;

//한글 불가능 , 영어대문자 숫자 가능, 10글자 이하 (10 글자 프로젝트 키는 대문자로 시작해야 하며, 1개 이상의 대문자 알파벳 숫자가 따라와야 합니다.)
String regexJiraSlug = “^([A-Z]{1})[A-Z0-9]{1,9}$”;
//한글 불가능, 특수문자 - _ . 가능 (maximum is 255 characters)
String regexGitlab = “^[a-zA-Z0-9-.]{1,255}$”;
String regexGitlab = “^[a-zA-Z0-9\-\
\.]{1,255}$”;

//한글 가능, 특수문자 `,.-(){} 가능 varchar100
String regexJenkins = “^[a-zA-Z0-9가-힣\-\
\(\)\,\.]{1,50}$”;
String regexJenkins = “^[a-zA-Z0-9가-힣-_(),.]{1,50}$”;

아래는 실제로 작성해서 사용한 정규식

=======================================================================================================================================  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  
  
public class RegexTestClass {  
  
	public static void main(String[]args) {  
		Matcher match;  
  
	//프로젝트 이름 : 한글 가능 5-50글자	varchar50  
	String regexProjectName;  
  
	//프로젝트 URL : 한글 불가능영문,숫자,특수문자(-) 가능 varchar50  
	String regexProjectSlug = "^[a-zA-Z0-9\\-]{1,50}$";  
		String projectSlug = "projectslug-aaa";  
	match = Pattern.compile(regexProjectSlug).matcher(projectSlug);  
	System.out.print(projectSlug);  
	System.out.println(" : "+match.find());  
  
	//JIRA 프로젝트 이름 : 한글 가능 (최대 80 문자.)  
	String regexJiraName;  
  
	//JIRA URL : 한글 불가능 ,  영어대문자 숫자 가능, 10글자 이하 (10 글자 프로젝트 키는 대문자로 시작해야 하며, 1개 이상의 대문자 알파벳 숫자가 따라와야 합니다.)  
	String regexJiraSlug = "^([A-Z]{1})[A-Z0-9]{1,9}$";  
	String jiraSlug = "JIRAURL101";  
	match = Pattern.compile(regexJiraSlug).matcher(jiraSlug);  
	System.out.print(jiraSlug);  
	System.out.println(" : "+match.find());  
  
	//Gitlab 그룹 이름 : 한글 불가능, 특수문자 - _ .  가능 (maximum is 255 characters)  
	//Gitlab 그룹 URL : 한글 불가능, 특수문자 - _ .  가능 (maximum is 255 characters)  
	//Gitlab 프로젝트 이름 : 한글 불가능, 특수문자 - _ .  가능 (maximum is 255 characters)  
	//Gitlab 프로젝트 URL : 한글 불가능, 특수문자 - _ .  가능 (maximum is 255 characters)  
	String regexGitlab = "^([A-Za-z0-9]{1})[a-zA-Z0-9-_.\s]{0,253}$";  
  
	String gitlabName = " ";  
	String gitlabSlug = "GitLabSlug-_.";  
	String gitlabProjectName = "GitLabProjectName-_-...a  aAA";  
	String gitlabProjectSlug = "GitLabProjectSlug-_-...ZZzz....";  
	match = Pattern.compile(regexGitlab).matcher(gitlabName);  
	System.out.print(gitlabName);  
	System.out.println(" : "+match.find());  
  
	match = Pattern.compile(regexGitlab).matcher(gitlabSlug);  
	System.out.print(gitlabSlug);  
	System.out.println(" : "+match.find());  
  
	match = Pattern.compile(regexGitlab).matcher(gitlabProjectName);  
	System.out.print(gitlabProjectName);  
	System.out.println(" : "+match.find());  
  
	match = Pattern.compile(regexGitlab).matcher(gitlabProjectSlug);  
	System.out.print(gitlabProjectSlug);  
	System.out.println(" : "+match.find());  
  
	//젠킨스 CI : 한글 가능, 특수문자 `,.-_(){} 가능 varchar100  
	//젠킨스 CI JOB : 한글 가능, 특수문자 `,.-_(){} 가능 varchar100  
	//젠킨스 CD : 한글 가능, 특수문자 가능 varchar100	-- CD는 툴에 접속을 하지 못해서 확인 못햇음  
	//젠킨스 CD JOB : varchar100 -- CD는 툴에 접속을 하지 못해서 확인 못햇음  
	//(다만 특수문자가 들어갈 시 호출 API 에서 오류 발생, API호출에서 사용할 수 있는 특수문자 -_().,)  
  
	//String regexJenkins  = "^[a-zA-Z0-9가-힣\\-\\_\\(\\)\\,\\.]{1,100}$";  
	String regexJenkins  = "^([A-Za-z0-9ㄱ-힣]{1})[a-zA-Z0-9ㄱ-힣-_(),.]{1,99}$";  
	String jenkinsName = "Jenkins-00-1";  
	String jenkinsJobName = "JenkinsJob-001";  
	match = Pattern.compile(regexJenkins).matcher(jenkinsName);  
	System.out.print(jenkinsName);  
	System.out.println(" : "+match.find());  
  
	match = Pattern.compile(regexJenkins).matcher(jenkinsJobName);  
	System.out.print(jenkinsJobName);  
	System.out.println(" : "+match.find());  
  
	String regexGitlabPath = "^([A-Za-z0-9]{1})([a-zA-Z0-9-_.]{0,253})([a-zA-Z0-9-_]{1})$";  
	String regexGitlabPathNumber = "[^0-9]+";  
	String gitPath = "a-";  
	System.out.println("#####################################");  
	match = Pattern.compile(regexGitlabPath).matcher(gitPath);  
	System.out.print(gitPath);  
	System.out.println(" gitPath : "+match.find());  
	match = Pattern.compile(regexGitlabPathNumber).matcher(gitPath);  
	System.out.print(gitPath);  
	System.out.println(" gitPath : "+match.find());  
  
	}  
}  
  
=======================================================================================================================================