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


이번 포스팅에서는 정규표현식을 이용한 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 =  "^[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 등의 프로그래밍 언어를 소개 합니다.

,



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


앞서 정규표현식 (Regular Expression) 에 대해 간단히 정리 했었습니다. 

이번에는 정규표현식 중 숫자만 허용 하는 표현식을 알아 보겠습니다. 




■ 정규표현식 숫자만 허용하기


1
String regExp = "^[0-9]+$";
cs


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


^ => 문자열의 시작

[...] => 문자의 집합, 두 문자 사이에 - 기호를 이용하여 범위를 지정 [0-9] 와 같이 입력하여 0 ~ 9 를 표현 

+ => 앞에 문자가 최소 한개이상 있음, 여기서는 0 ~ 9 사이의 숫자의 갯수 제한이 없음을 의미

$ => 문자열 종료 


다시 정리 하면 아래와 같습니다. 



^[0-9]+$


문자열 시작 

[0 ~ 9 까지 숫자 인정] 

0 ~ 9 까지 숫자 갯수 제한 없음

문자열 종료



위 표현식이 정말 숫자만 허용 하는지 확인 해보겠습니다. 


1
2
3
4
5
6
7
String testStr1 = "12345";
 
if(testStr1.matches(regExp)){
    System.out.println("testStr1 ==> 숫자만 입력 됨");
}else {
    System.out.println("testStr1 ==> 숫자 외 다른 문자도 입력 됨");
}
cs


testStr1 이라는 변수에 숫자만 1 ~ 5 까지 나열 되어 있습니다. 

그냥 봐도 숫자만 입력 된 것이 맞죠? ^^


결과는 아래와 같습니다. 

testStr1 ==> 숫자만 입력 됨



1
2
3
4
5
6
7
String testStr2 = "1T2E3S4T5";
 
if(testStr2.matches(regExp)){
    System.out.println("testStr2 ==> 숫자만 입력 됨");
}else {
    System.out.println("testStr2 ==> 숫자 외 다른 문자도 입력 됨");
}
cs


testStr2 이라는 변수에는 숫자와 문자의 조합인 값이 들어 있습니다. 


결과는 아래와 같습니다.

testStr2 ==> 숫자 외 다른 문자도 입력 됨



1
2
3
4
5
6
7
String testStr3 = "";
 
if(testStr3.matches(regExp)){
    System.out.println("testStr3 ==> 숫자만 입력 됨");
}else {
    System.out.println("testStr3 ==> 숫자 외 다른 문자도 입력 됨");
}
cs


testStr3 이라는 변수는 빈 값으로 설정 했습니다. 


결과는 아래와 같습니다.

testStr3 ==> 숫자 외 다른 문자도 입력 됨




■ 정규표현식 숫자와 공백 허용하기


위 세번째 예제를 사용한 이유는 숫자만 허용하는 표현식을 많이 사용 하기도 하지만 더 많이 사용 하는 것이 숫자와 빈값을 인정하는 표현식을 더 많이 사용하기 때문입니다. 


앞선 숫자만 허용하는 표현식에서는 + 라는 표현식을 이용하여 선행 문자의 갯수를 1개 이상으로 지정 했었습니다. 하지만 이 표현식을 * 로 변경할 경우 선행 문자의 갯수가 0개 이상으로 지정 할 수 있습니다. 


예제를 보시겠습니다. 


1
2
3
4
5
6
7
String regExp2 = "^[0-9]*$";
String testStr4 = "";
if(testStr4.matches(regExp2)){
    System.out.println("testStr4 ==> 숫자만 입력 됨");
}else {
    System.out.println("testStr4 ==> 숫자 외 다른 문자도 입력 됨");
}
cs


regExp2 변수는 0 ~ 9 사이의 숫자가 0개 이상인 것으로 지정 했습니다. 


결과는 아래와 같습니다. 

testStr4 ==> 숫자만 입력 됨



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

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

감사합니다 :D




블로그 이미지

쉬운코딩이최고

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

,