안녕하세요. 제임스 입니다. 


이번 포스팅에서는 정규표현식을 이용한 split 함수를 이용 하는 방법에 대해 알아 보겠습니다. 



Java split 함수 관련 내용은 아래 포스팅을 참조 하세요.

2017/11/16 - [Java] - [ 자바 코딩 ] Java split() 함수로 문자열 자르기



■ 정규표현식으로 문자열 자르기 (split 함수 사용)



▶ 예제 1


1
String regExp = "\\Q|\\E";
cs


정규표현식을 위와 같이 작성하여 문자열 자르기를 위한 토큰 값으로 선언 했습니다. 


정규표현식에서 \Q 와 \E 는 한셋트로 사용되는 표현식으로 \Q 와 \E 사이의 문자를 의미 합니다. 

즉, 위 표현식의 경우 일반적으로 or 를 의미하는 " | " 를 토큰 값으로 선언 한 것입니다. 


사용 방법은 아래와 같습니다. 


1
2
3
4
5
6
String strInput = "james|tistory|regular|expression";
String[] retStr = strInput.split(regExp);
        
for(int i = 0; i < retStr.length; i++){
    System.out.println("retStr["+i+"] = "+retStr[i]);
}
cs


strInput 값에 " james | tistory | regular | expression " 이라는 변수값을 선언 했습니다. 

Sting 을 split 했을때 배열로 리턴 됩니다. (위 Java split() 함수 포스팅 참조)


결과 값을 확인하기 위해 for loop 를 돌려서 결과 값을 찍어 봤습니다. 


결과는 아래와 같습니다. 


Results

retStr[0] = james

retStr[1] = tistory

retStr[2] = regular

retStr[3] = expression




▶ 예제 2


1
String regExp = "\\s*[a-zA-Z]+";
cs


정규 표현식을 위와 같이 작성 해봤습니다. 

위 표현식은 공백문자가 0회 이상, 영문 대소문자 1회 이상인 것을 의미하는 표현식입니다. 


즉, 공백문자나 영문자가 오면 이것을 토큰으로 사용 하겠다는 의미로 작성한 표현식입니다. 


실제 예문을 보시겠습니다. 


1
2
3
4
5
6
7
8
String strTest = "a + b - c * d / e < f > g >= h <= i == j";
String[] retStr = strTest.split(regExp);
        
for (String out : retStr) {
    if (!"".equals(out)) {
        System.out.print(out);
    }
}
cs



strTest 라는 변수에 영문자, 공백문자 그리고 기타 비영문자들이 자리하고 있습니다. 

의도 한대로 표현식이 적용 된다면 공백문자 외 +, -, * 등등의 값들이 남아 있어야 합니다. 


위 코드 실행 결과는 아래와 같습니다. 


Results 

 + - * / < > >= <= ==


위 결과 값에서   는 공백문자를 의미 합니다. 


표현식에서는 조건을 공백문자(0회 이상) + 영문자(1회 이상 : 즉, 필수) 형태로 설정했기 때문에 결과가 위와 같이 나왔습니다. 


a + b - c * d / e < f > g >= h <= i == j


위 문자열에 마우스 커서를 가져가 보시면 좀더 편하게 이해 하실 수 있을 것 같습니다.

첫번째 a 를 제외 나머지 문자열들은 앞에 공백문자 + 영문자 형태로 되어 있습니다. 

결과적으로 나머지 영문자 뒤에 따라오는 공백문자 + 비영문문자의 조함이 남은 결과 값으로 리턴 되었습니다. 



최대한 쉽게 풀어 쓴다고 했는데 오히려 더 복잡해 진것 같은 느낌적인 느낌이 듭니다.


혹, 이해하기 어려운 부분이 있으신 경우 글 남겨 주시면 도움 드릴 수 있도록 하겠습니다. 





 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



안녕하세요. 제임스 입니다. 


자바 정규표현식에서 한글만 허용하는 방법에 대해 정리해보겠습니다. 



■ 정규표현식 한글만 허용하기


1
String regExp = "^[가-힣]*$";
cs


위 표현식은 가 ~ 힣 까지의 한글을 허용 한다는 표현식입니다. 

뒤에 * 을 붙여서 입력이 안되어도 한글입력으로 인정합니다. 




샘플 코드 보시겠습니다. 


1
2
String input1 = "가나뷁";
System.out.println("input1 정규표현식 적용 결과 ==> "+input1.matches(regExp));
cs


문자열이 "가" ~ "힣" 범위 안에 들어 가는 한글들로 구성 되어 있습니다. 

위 코드 실행 결과는 아래와 같습니다. 


input1 정규표현식 적용 결과 ==> true




1
2
String input2 = "";
System.out.println("input2 정규표현식 적용 결과 ==> "+input2.matches(regExp));
cs


입력값이 없는 상태라도 한글로 인정 됩니다. 표현식에 보시면 * 을 추가 했는데요. 앞의 표현식이 입력되지 않아도 허용 한다는 의미 입니다. 


위 코드 실행 결과는 아래와 같습니다. 


input2 정규표현식 적용 결과 ==> true




1
2
String input3 = "공백 추가";
System.out.println("input3 정규표현식 적용 결과 ==> "+input3.matches(regExp));
cs


문자열에 공백이 추가 되었습니다. 정규표현식 상에서 공백을 허용하겠다는 내용이 없으므로 위 코드 실행 결과는 false 가 리턴 되어야 정상입니다. 


위 코드 실행 결과는 아래와 같습니다. 


input3 정규표현식 적용 결과 ==> false




■ 정규표현식 한글만 허용하기 (공백문자 허용)


그렇다면 공백을 허용 하고자 한다면 어떻게 해야 할까요? 

표현식으로 작성한 부분은 다음과 같습니다.


^[가~힣]*$


가 ~ 힣 까지 모두 허용 하는데 여기에 공백문자도 허용하겠다고 선언 하면 됩니다. 


1
String regExp = "^[가-힣\\s]*$";
cs


위와같이 \\s 를 추가 해줬습니다. \s 는 공백문자 허용 한다는 내용입니다. 

결과는 어떻게 나올까요? 당연히 true 로 리턴 됩니다. 


input3 정규표현식 적용 결과 ==> true




■ 정규표현식 한글만 허용하기 (자음&모음 허용)


1
2
String input4 = "레알ㄷㄷㄷㅏㄷㅏ";
System.out.println("input4 정규표현식 적용 결과 ==> "+input4.matches(regExp));
cs



이번에는 자음과 모음이 문자열에 포함되었습니다. 작성한 표현식 상에 자음 / 모음에 관한 정의를 하지 않았다는 것을 생각하면 실행 결과는 예상 가능하시죠? 


input4 정규표현식 적용 결과 ==> false



자음과 모음도 허용하는 표현식을 만들어 보겠습니다. 


1
String regExp = "^[ㄱ-ㅎ|ㅏ-ㅣ|가-힣\\s]*$";
cs


자음 ㄱ-ㅎ 추가 후 or 을 의미하는 " | " 값으로 구분합니다.

모음 ㅏ-ㅣ 추가 후 or 을 의미하는 " | " 값으로 구분합니다.

그리고 기존 표현식을 추가 해주면 자음, 모음을 포함한 한글 허용하기 표현식이 됩니다. 


실행 결과는 아래와 같습니다. 


input4 정규표현식 적용 결과 ==> true




상황에 따라 한글만 허용하더라도 자음/모음은 허용 하지 않거나 허용 해야 하는 경우가 다르게 나옵니다. 

상황에 맞게 표현식을 수정해가면 멋진 코딩을 할 수 있을 거라 생각됩니다. 




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D


블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



안녕하세요. 제임스 입니다. 


이번 포스팅에서는 정규표현식으로 영문자만 허용하는 방법에 대해 정리 하겠습니다. 



■ 정규표현식 영문자만 허용하기 (대소문자 구분없이 모두 허용)


1
String regExp =  "^[a-zA-Z]*$";
cs



위 표현식을 정리 하면 아래와 같습니다.


^[a-zA-Z]*$


^ => 문자열 시작

a-z => 소문자 a ~ z 까지 허용

A-Z => 대문자 A ~ Z 까지 허용

* => 앞에 문자가 없거나 무한대로 많이 있을 수 있음 

$ => 문자열 종료



즉, 대소 문자 구분없이 영문자 모두를 허용하며 빈값도 허용한다는 표현식 입니다. 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
String regExp =  "^[a-zA-Z]*$";
 
String testStr1 = "James";
String testStr2 = "james";
String testStr3 = "JAMES";
String testStr4 = "j a m e s";
String testStr5 = "J A M E S";
String testStr6 = "";
        
System.out.println("testStr1 ==> "+testStr1.matches(regExp));
System.out.println("testStr2 ==> "+testStr2.matches(regExp));
System.out.println("testStr3 ==> "+testStr3.matches(regExp));
System.out.println("testStr4 ==> "+testStr4.matches(regExp));
System.out.println("testStr5 ==> "+testStr5.matches(regExp));
System.out.println("testStr6 ==> "+testStr6.matches(regExp));
cs


testStr1 은 대소문자 같이 포함한 문자열입니다. 

testStr2 는 소문자만 포함한 문자열

testStr3 은 대문자만 포함한 문자열

testStr4 는 소문자만 포함한 문자열이지만 띄어쓰기를 했습니다. 

testStr5 는 대문자만 포함한 문자열이지만 역시 띄어쓰기를 했습니다. 

testStr6 은 빈값으로 설정 했습니다. 


각각의 변수를 String 객체의 matches 함수를 이용하여 결과값을 찍어 봤습니다. 


결과는 아래와 같습니다. 


testStr1 ==> true

testStr2 ==> true

testStr3 ==> true

testStr4 ==> false

testStr5 ==> false

testStr6 ==> true



4, 5번의 경우 문자열에 띄어쓰기가 포함되어 있어 false 가 리턴 되었습니다. 

6번은 아무 값도 없는 상태 이기 때문에 true 가 리턴 되었습니다. 만약 6번이 띄어쓰기만 있었다면 역시 false 가 리턴 됩니다. 




■ 정규표현식 영문자 대문자만 or 소문자만 허용하기 


1
String regExpLowerCaseOnly =  "^[a-z]*$";
cs


위 표현식과 같이 a-z 만 추가 하면 소문자만 인정하는 표현식이 됩니다. 



1
String regExpUpperCaseOnly =  "^[A-Z]*$";
cs


소문자를 대문자로 변경 하기만 하면 대문자만 인정하는 표현식이 됩니다. 



간단하죠? ^^


영문자 관련 정규표현식은 많이 사용하는 것이니 잘 기억해두시고 사용하시면 좋을거예요 ^^



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D


블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,