* Date 형식 String datePattern = "[\d+\-]+[\d+\-]+[\d]+";
* email 형식 검사하는 java regex 를 이용한 소스
package kr.pe.okjsp.util;
import java.util.regex.Pattern;
public class FormatEmail {
public static void main(String[] args) {
String [] mails = {"
okjsp@okjsp.pe.kr",
"@okjsp.pe.kr",
"
hello@kr",
"happ_okjsp.pe.kr"};
for(int i=0; i<mails.length; i++) {
System.out.println(mails[i] + " : " + isEmail(mails[i]));
} // end for
}
public static boolean isEmail(String email) {
if (email==null) return false;
boolean b = Pattern.matches(
"[\w\~\-\.]+@[\w\~\-]+(
\.[\w\~\-]+)+",
email.trim());
return b;
}
}
import java.util.regex.*; // Pattern과 Matcher가 속한 패키지
class RegularEx5
{
public static void main(String[] args)
{
String source = "23123()asdawe()23123()asdawe()23123()asdawe()";
String pattern = "
\d+\(\)"; // 숫자(
\d)뒤에오는 괄호를 패턴으로 지정
// d는 숫자를 의미하며 +는 하나이상의 숫자가 있어야함을 의미
// 괄호는 예약문자(?)이므로 \를 앞에 붙여줘야 괄호로 인식
// 괄호앞에 \를 붙이지 않으면 그룹화문자로 인식한다.
// 를 \와 같이 두개씩 쓰는 이유는 문자열 내에서 를 표현하려면 두개 써줘야하기 때문
StringBuffer sb = new StringBuffer();
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(source);
System.out.println("source:"+source);
int i=0;
while(m.find()) {
// 지정한 패턴과 매칭되는 부분을 치환한다. 마지막 두글자인 괄호를 잘라내고
// 원하는 문자(@@)로 바꾼다.
// find()를 통해서 패턴과 일치하는 부분은 m.group()을 통해서 얻는다.
m.appendReplacement(sb, m.group().substring(0, m.group().length()-2)+"@@");
}
m.appendTail(sb);
System.out.println("result:"+sb.toString());
}
}
/*
source:23123()asdawe()23123()asdawe()23123()asdawe()
result:23123@@asdawe()23123@@asdawe()23123@@asdawe()
*/
숫자뒤에오는 ()를 @@로 바꾼겁니다.
[예제2] - 다양한 정규식활용예
import java.util.regex.*; // Pattern과 Matcher가 속한 패키지
class RegularEx2
{
public static void main(String[] args)
{
String[] data = {"bat", "baby", "bonus", "c", "cA",
"ca", "co", "c.", "c0", "c#",
"car","combat","count", "date", "disc"
};
String[] pattern = {".*","c[a-z]*","c[a-z]", "c[a-zA-Z]", "c[a-zA-Z0-9]",
"c.","c.*","c\.","c\w","c\d","c.*t", "[b|c].*",
".*a.*", ".*a.+", "[b|c].{2}"
};
for(int x=0; x < pattern.length; x++) {
Pattern p = Pattern.compile(pattern[x]);
System.out.print("Pattern : " + pattern[x] + " 결과: ");
for(int i=0; i < data.length; i++) {
Matcher m = p.matcher(data[i]);
if(m.matches())
System.out.print(data[i] + ",");
}
System.out.println();
}
} // public static void main(String[] args)
}
/*
Pattern : .* 결과: bat,baby,bonus,c,cA,ca,co,c.,c0,c#,car,combat,count,date,disc,
Pattern : c[a-z]* 결과: c,ca,co,car,combat,count,
Pattern : c[a-z] 결과: ca,co,
Pattern : c[a-zA-Z] 결과: cA,ca,co,
Pattern : c[a-zA-Z0-9] 결과: cA,ca,co,c0,
Pattern : c. 결과: cA,ca,co,c.,c0,c#,
Pattern : c.* 결과: c,cA,ca,co,c.,c0,c#,car,combat,count,
Pattern : c. 결과: c.,
Pattern : cw 결과: cA,ca,co,c0,
Pattern : cd 결과: c0,
Pattern : c.*t 결과: combat,count,
Pattern : [b|c].* 결과: bat,baby,bonus,c,cA,ca,co,c.,c0,c#,car,combat,count,
Pattern : .*a.* 결과: bat,baby,ca,car,combat,date,
Pattern : .*a.+ 결과: bat,baby,car,combat,date,
Pattern : [b|c].{2} 결과: bat,car,
*/
[참고]쌍따옴표(")내에서 escape문자()를 표현하려면 escape문자를 '\'와 같이 두 번 사용해야한다.
자주 쓰일 만한 몇 가지 패턴들을 만들어서 테스트하였다. 그 결과를 정리해보면 다음과 같다.
정규식
설명
결과
c[a-z]*
c로 시작하는 영단어
c,ca,co,car,combat,count,
c[a-z]
c로 시작하는 두 자리 영단어
ca,co,
c[a-zA-Z]
c로 시작하는 두 자리 영단어
(a~z 또는 A~Z, 즉 대소문자 구분안함)
cA,ca,co,
c[a-zA-Z0-9]
cw
c로 시작하고 숫자와 영어로 조합된 두 글자
cA,ca,co,c0,
.*
모든 문자열
bat,baby,bonus,c,cA,ca,co,c.,c0,c#,car,combat,count,date,disc,
c.
c로 시작하는 두 자리
cA,ca,co,c.,c0,c#,
c.*
c로 시작하는 모든 문자열(기호포함)
cA,ca,co,c.,c0,c#,car,combat,count,
c.
c.와 일치하는 문자열
'.'은 정규식표현에 사용되는 문자이므로 escape문자인 ''를 사용해야한다.
c.,
cd
c[0-9]
c와 숫자로 구성된 두 자리 문자열
c0,
c.*t
c로 시작하고 t로 끝나는 모든 문자열
combat,count,
[b|c].*
[bc].*
[b-c].*
b 또는 c로 시작하는 문자열
bat,baby,bonus,c,cA,ca,co,c.,c0,c#,car,combat,count,
[^b|c].*
[^bc].*
[^b-c].*
b 또는 c로 시작하지 않는 문자열
date,disc,
.*a.*
a를 포함하는 모든 문자열
* : 0 또는 그 이상의 문자
bat,baby,ca,car,combat,date,
.*a.+
a를 포함하는 모든 문자열.
+: 1 또는 그 이상의 문자
+는 *과는 달리 반드시 하나 이상의 문자가 있어야 하므로 a로 끝나는 단어는 포함되지 않았다.
bat,baby,car,combat,date,
[b|c].{2}
b 또는 c로 시작하는 세 자리 문자열.