[Java] 자바 #43, 정규표현식 설명 및 예제
- 프로그래밍 언어/Java
- 2019. 3. 10. 19:45
정규 표현식
- 정규식
- 패턴에 일치하는 문자열을 검색하는 표현식.
정규 표현식 구성 요소(문법)
1. 모든 문자들
ex) "a" ->a, "test" -> test
2. 모든 문자(와일드카드)
- .
- wildcard(모든 문자)
ex) "." -> 모든 문자를 검색
ex) "..." -> 문자3개
ex) "a.." -> a다음 문자2개
<앞의 요소의 출연 횟수 지정>
3. 없음
- 출연 횟수 : 1 ~ 1
- 생략 불가능, 중복 불가능
ex)"abc" -> abc
ex) "ab?cd+e*" -> acddddeeeeeeeeeeeeeeeeeee
4. ?
- 출현 횟수 : 0 ~ 1
- 생략 가능, 중복 불가능
ex)"abc" -> abc
ex)"a?bc" -> bc나 abc를 찾는 표현.
ex)"홍?길동" -> 안녕하세요. 홍길동입니다. 그냥 길동이라고 불러주세요.
ex)"(ab)?cd -> cd,abcd/ bcdX
5. +
- 출현 횟수 : 1 ~ 무한대
- 생략 불가능, 중복 가능
ex)"a+bc" -> bc(x) -> abc, aabc, aaaabc, aaaaaaaaaaaaaaabc
6. *
- 출현 횟수 : 0 ~ 무한대
- 생략 가능, 중복 가능
ex)"a*bc" -> bc(x) -> abc, aabc, aaaabc, aaaaaaaaaaaaaaabc
7. {n}
- 고정 횟수 출현
- n: 출현횟수
ex)aaaaabc
ex)a{5}bc -> aaaaabc
8. {n,}
- n회 이상 ~ 무한대 출연
ex) "a{3,}bc"
9. {n,m}
- n회 이상 ~ m회 이하
ex) "a{3,8}bc"
10. [요소]
- choice
- [ ]안에 나열된 요소 중 하나를 선택
ex)"[abc]" -> a or b or c -> a,b,c
ex)"[abc]de"->ade,bde,cde
ex)"[김이박최정홍]길동" -> 김길동, 이길동, 박길동, 최길동, 정길동,
ex)"[김이박최정홍]?길동" -> 길동, 김길동, 이길동
ex)"[(010)(011)(016)(017)(019)]-4567-8900]" ->010-4567-8900, 011-4567-8900, 016-4567-8900, 02-4567-8900, 017-4567-8900, 019-4567-8900
- 숫자만 검색
ex) "[0123456789]{2,4}"
- 주민번호 검색
: 숫자6자리-숫자7자리
ex) "[0123456789]{6}-[0123456789]{7}"
930101-1010101
- 홀수로만 되어 있는 숫자 검색
ex) "[93751]{2,3}"
- 전화번호(휴대폰) 검색
: 숫자3자리-숫자3~4자리-숫자4자리
ex) "[0123456789]{3}-[0123456789]{3,4}-[0123456789]{4}"
- 영소문자 검색
ex) "[abcdefghijklmnopqrstuvwxyz]{3,10}"
- 영대문자 검색
ex) "[ABCDEFGHIJKLMNOPQRSTUVWXYZ]"
- 영어와 숫자의 조합으로만 되어 있는 단어 검색
ex) "[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789]{3,10}
범위 표현( - 하이픈 ) : 중간에 빠진 문자가 없어야 하고, 문자코드값 순서대로 배치
- [0123456789] -> [0-9] (O)
- [012389] -> [0-9] (X)
- [34567] -> [3-7] (O)
- [abcdefghijklmnopqrstuvwxyz] -> [a-z]
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ] -> [A-Z]
- 영어와 숫자의 조합으로만 되어 있는 단어 검색
ex) "[A-Za-z0-9]{3,10}"
- 한글만 검색
ex) "[가-힣]{5}"
- 자바에서 주로 사용하는 식별자를 검색
- 회원 가입 : 아이디 입력
: 영문자 + 숫자 + _
: 4자 ~ 12자 이내
: 숫자로 시작 X
ex) "[A-Za-z_][A-Za-z0-9_]{3,11}"
ex) test123 (O), hong (O), 123test (X), te (X), hong1234567890 (X), $hong (X)
11. 공백
- \s
ex)"[홍김박]\s?길동"
홍길동, 이길동, 박길동, 최길동
홍 길동, 이 길동, 박 길동, 최 길동
정규표현식 예제 사이트
regexlib.com
\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}
test@test.com
정규표현식을 이용한 예제1
private static String wholeText;
static {
wholeText = "안녕하세요. 저는 홍길동입니다. 나이는 20살입니다. 연락처는 010-9371-5541입니다. 연락이 안되면 010-5435-5467로 연락주세요.";
}
다음과 같이 변수가 선언되어있다면
Pattern p = Pattern.compile("\\d{3}-\\d{4}-\\d{4}"); 정규식 패턴을 담고
Matcher m = p.matcher(wholeText);
while (m.find()) { 패턴에 맞는 m 매처가 있다면
System.out.println(m.group()); 그것에 접근
}
정규표현식을 이용한 예제2
네이버 시작 페이지 > URL 추출
try {
String line = "네이버 주소는 http://www.naver.com";
StringBuilder txt = new StringBuilder(line);
Pattern p = Pattern.compile("(http|ftp|https):\\/\\/[\\w\\-_]
+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])?");
Matcher m = p.matcher(txt.toString());
while (m.find()) {
System.out.println(m.group());
}
} catch (Exception e) {
e.printStackTrace();
}
문자열이 정규식에 해당하는지 여부 ( matches 메소드와 \d)
String str = "정규식123k";
str.matches("[가-힣]{3}\\d{3}[a-z]"); \\붙여주는건 escape역할임
>> \d는 숫자1개를 검사하는 표현식.
>> 성립하면 true 아니면 false 반환.
>> input값이 정규식에 맞는지 아닌지만 판단할 때 편리.
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 자바 #45, 람다식 예제 및 활용 (3) | 2019.03.16 |
---|---|
[Java] 자바 #44, String split(), StringTokenizer 클래스 ( 문자열 분리 , 쪼개기) (5) | 2019.03.11 |
[Java] 자바 #42, 익명객체(Anonymous Object) 개념 및 예제 (0) | 2019.03.09 |
[Java] 자바 #41, Scanner 객체 (0) | 2019.03.09 |
[Java] 자바 #41, File입출력(3) - 회원정보 입출력하기 예제 (절대경로, 상대경로) (0) | 2019.03.08 |