Java 정규표현식
◈ 정규표현식 문법
1) ‘.’ 특수문자
- 임의의 한 문자를 나타낸다.
- ‘.’ 특수문자가 위치한 곳에는 반드시 한 글자가 위치하여야 한다.
- ex ) 패턴 : a.b → 일치하는 문자열 : acb, adb, azb 등
- ex ) 패턴 : ab. → 일치하지 않는 경우 : ab, abcd 등
2) ‘*’ 특수문자
- 바로 앞의 문자를 0번 이상 반복한다.
- * 앞에는 한 글자 이상의 단어가 반드시 와야 한다.
- ex ) 패턴 : ab*c → abc, abbc, abbbc 등
- ex ) 패턴 : *ab → 불가능
3) ‘+’ 특수문자
- 바로 앞의 문자를 1번 이상 반복한다.
- + 앞에는 한 글자 이상의 단어가 반드시 와야 한다.
- ex ) 패턴 : a+b → aab, aaab, aaaab 등
- ex ) 패턴 : +ab → 불가능
4) ‘?’ 특수문자
- 특수문자 바로 앞의 문자가 하나 있거나 없는 것을 의미한다.
- ex ) 패턴 : try? → 일치하는 문자열 : tr, try
패턴 : a?c → 일치하는 문자열 : c, ac
5) ‘^’ 특수문자
- 문장의 처음을 나타낸다.
- ex ) 패턴 : ^Hello → 일치하는 문자열 : Hello abc, Hello world 등
Hello로 시작하는 문자열
6) ‘$’ 특수문자
- 문장의 끝을 나타낸다.
- ex ) 패턴 : world$ → 일치하는 문자열 : hello world, welcome my world 등
world로 끝나는 문자열
7) ‘[]’ 특수문자
- 괄호 안의 문자 중 일치하는 것을 찾고자 할 경우 사용
- ex ) 패턴 : [abc] → 일치하는 문자열 : a, b, c, ab, abc 등
[a-z] → 소문자가 포함된 모든 문자열
[A-Z] → 대문자가 포함된 모든 문자열
[0-9] → 숫자가 포함된 모든 문자열
^[a-zA-Z0-9] → 숫자가 영문자로 시작되는 모든 문자열
8) ‘[]’ 특수문자 안에서의 ‘^’ 특수문자
- []안의 문자와 일치하지 않는 문자열을 포함하고 있는 패턴을 의미한다
- ex ) 패턴 : [^abc]de → .de패턴과 동일 (ade, bde, cde 제외)
9) ‘{}’ 특수문자
- 특수문자 앞의 문자나 문자열의 반복되는 개수를 말한다.
- ex ) go{5}ggle → gooooogle
go{3,}ggle → gooogle, goooogle, gooooogle 등 (o가 3개 이상)
go{2,4}ggle → google, gooogle, goooogle (o가 2개이상 4개이하)
10) ‘()’ 특수문자
- ()안의 글자들을 하나의 문자로 본다.
- ex ) (hero_){3} → hero_hero_hero_
(hero_)* → null, hero_, hero_hero_ 등
11) ‘|’ 특수문자
- 패턴 안에서 OR연산 사용시 사용
- ex ) man|woman → man, woman, manwoman, superman 등
12) 문자 클래스
- [] 안에서 자주 사용되는 패턴들을 미리 키워드로 정의하여 놓은 것
- 문자클래스는 PHP에서는 이용되지만 JAVA에서는 이용되지 않음
-
패턴
문자 클래스
J2SDK 1.4의 예
[a-zA-Z] : 모든 영문자
[[:alpha:]]
\p{Alpha}
[0-9] : 숫자
[[:digit:]]
\p{Digit}
[a-zA-Z0-9] : 영문자와 숫자
[[:alnum:]]
\p{Alnum}
공백
[[:space:]]
\p{Space}
javascript 에서 사용 !!!
# 매칭문자
\D : 숫자가 아닌 문자
\d : 숫자
\s : 공백문자
\w : [A-Z,a-z,0-9], 알파벳, 숫자로 된 문자, 밑줄기호
\W : \w를 제외한것
flag - i : 대/소문자 구분 없음
g : 전역검색
m : 여러줄 검색
정규식 매칭중 () 사용시 괄호로 묶은 패턴은 매칭후 그 부분을 기억하여 결과가 저장되는 배열에 같이 저장된다.
괄호로 묶은 부분만 저장된다.
ex1 ) var rgExp = /(^D*[0-9])/
var str = "This is fun 01 stuff";
var resultArray = str.match(rgExp);
document.writeln(resultArray); ==> This is fun 0,This is fun 0
ex2 ) var rgExp = /(^D*)[0-9]/
var str = "This is fun 01 stuff";
var resultArray = str.match(rgExp);
document.writeln(resultArray); ==> This is fun 0,This is fun
ex3 ) 숫자에 Comma 추가하기 (출처 : 바로가기 >> )
function addComma(num) {
if(isNaN(num) == true) {
return 0;
}
var reg = /(^[+-]?\d+)(\d{3})/;
var strNum = num + '';
while(reg.test(strNum)) {
strNum = strNum.replace(reg, '$1' + ',' + '$2');
}
return strNum
}
==> "123456789" -> (123456789 replace) -> "123456,789" -> (123456 replace) -> "123,456,789"
http://blog.naver.com/witchope/30077428568
자바 정규표현식
. : 임의의 한 문자(필수)
ex) ab. => abc, abd, abe
? : 바로 앞의 문자가 없거나 하나가 있음을 의미
ex) a?c => ac, abc, bc
* : 바로 앞의 문자가 없거나 하나 이상 반복
ex) ab* => a, ab, abb, abbb
+ : 바로 앞의 문자가 하나이상 반복
ex) ab+ => ab, abb, abb
^ : 문자열의 시작을 의미
ex) ^a => ab, abc, abcd
[^] : ^이후의 괄호안 형식은 제회
ex) ab[^c]+ : abd, abe, [^c] 자체가 한글자를 의미함
$ : 문자열의 끝을 의미
ex) abc$ : ab
[] : []안의 형식 일치
ex) [abc] : a, b, c, ab, ac, bc, abc
{} : {}앞 문자열 반복갯수
ex) ab{3} : ababab
ab{2,} : ab, abab, ababab, abababab
ab{1, 2} : ab, abab
() : ()안의 내용을 하나로 묶음
ex) (ab){2} : abab
| : or 연산
ex) (a|b|c) : a, b, c, ab, ac, bc, abc
[a-z] : 소문자
[A-Z] : 대문자
[0-9] : 숫자
[a-zA-Z0-9] : 영문, 숫자
자바에서 이용할 경우
String의 matchers 또는 Pattern 클래스와 Matchers 클래스 사용
public static void main(String[] args) {
String regExpStr = "^a.c$";
String[] strArr = {"abc", "acc", "adc", "aec", "afc", "agc", "ahc", "aiic"};
for(String str : strArr) {
System.out.println("[" + str + "] : " + str.matches(regExpStr));
}
// email 형식 정규식
// 개인적으로 해보니 ^$는 꼭 써줘야 겠음
String regExpStr2 = "^[a-zA-Z0-9]+[@][a-zA-Z0-9]+[\\.][a-zA-Z0-9]+$";
String emailStr = "babolsk@bbb.com";
Pattern pattern = Pattern.compile(regExpStr2);
Matcher match = pattern.matcher(emailStr);
// 매칭에 맞을 경우 true
System.out.println("[" + emailStr + "] : " + match.find());
}