일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- chat API
- MSA
- GitLab
- GIT
- desktop
- application 재기동
- 자바 정규식
- Chat gpt
- sh
- docker
- ChatGPT
- 정규표현식
- 모니터링 및 경고 중앙화
- 알림
- crontab
- 네이버클라우드플랫폼
- 분산추적
- 도커
- Catalina
- 리눅스
- 마이크로서비스 패턴
- 네이버웍스
- MAC
- 가상머신 차이
- 제어루프
- linux
- 메시지
- error
- AWS
- eclipse
Archives
- Today
- Total
시간나는대로 틈틈히 정리 합시다~~!!!
[Java] 정규표현식 문법 본문
반응형
1. 자바 문자열 객체(java.lang.String)에서 정규식을 사용하는 자주 쓰는 메소드
- boolean matches(String regex) => 매칭 여부 확인
ex) "abc".matches("[a-z]"); => true
- String replaceAll(String regex, String replacement) => 매칭되는 값 변경
ex) "abc123".replaceAll("[a-z]", "*"); => ***123
- String[] split(String regex)
ex) "123b456".split("[a-z]"); => ["123","456"]
2. java.util.regex 패키지에 있는 클래스
- Pattern 객체
정규식의 컴파일된 표현 입니다(정규식을 적용 가능하도록 컴파일해서 가지고 있습니다).
Pattern 클래스는 공개된 생성자를 제공하지 않습니다.
패턴을 생성하려면 Pattern객체를 반환하는 정적 compile 메소드를 호출해야 합니다.
이 메소드는 첫 번째 인자로 정규식 문자열을 받아 들입니다.
- Matcher 객체
패턴을 해석하고 입력 문자열에 대해 일치 작업을 수행하는 엔진입니다.
Pattern 클래스와 마찬가지로 Matcher는 어떤 공개된 생성자도 정의하고 있지 않습니다.
Matcher객체는 Pattern 객체의 matcher 메소드를 호출해서 얻습니다.
- PatternSyntaxException 객체
정규식 패턴의 문법 오류를 나타내는 unchecked 예외 입니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReplaceTest {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
Pattern pattern = Pattern.compile("<[^<>]*>");
Matcher matcher = pattern.matcher("배를 먹습니다. <br />사과를 먹습니다.");
boolean found = false;
while(matcher.find()) {
sb.append("텍스트 \"")
.append(matcher.group()) // 찾은 문자열 그룹 입니다.
.append("\"를 찾았습니다.\n")
.append("인덱스 ")
.append(matcher.start()) // 찾은 문자열의 시작 위치 입니다.
.append("에서 시작하고, ")
.append(matcher.end()) // 찾은 문자열의 끝 위치 입니다.
.append("에서 끝납니다.\n");
found = true;
}
if(!found) {
sb.append("찾지 못했습니다.");
}
System.out.println(sb.toString());
}
}
3. 문법
- 일반 매칭 패턴 지정 혹은 제외
정규식 | 설명 |
[abc] | a, b, c중 하나이면 일치 합니다. |
[^abc] | a, b, c를 제외한 다른 글자 이면 일치합니다. |
[a-zA-Z] | a 부터 z까지의 소문자 알파벳 이거나 A 부터 Z까지의 대문자 알파벳 중의 하나라면 일치합니다.(범위) |
[a-d[m-p]] | a 부터 d까지, 또는 m 부터 p까지 중에 하나와 일치합니다: [a-dm-p] (합집합) |
[a-z&&[def]] | d, e, f 중의 하나와 일치합니다. (교집합) |
[a-z&&[^bc]] | b와 c를 제외한 a 부터 z까지 중의 하나와 일치합니다: [ad-z] (차집합) |
[a-z&&[^m-p]] | m부터 p 까지를 제외한, a 부터 z까지 중의 하나와 일치합니다: [a-lq-z] (차집합) |
- 미리 정의된 패턴 지정
정규식 | 설명 |
. | 임의의 문자 (라인 종결자와 일치할 수도 하지 않을 수도 있음) |
\d | 숫자 문자: [0-9] |
\D | 숫자 문자가 아닌것: [^0-9] |
\s | 화이트 스페이스 문자: [ \t\n\x0B\f\r] |
\S | 화이트 스페이스 문자가 아닌것: [^\s] |
\w | 알파벳 단어 문자(word 문자): [a-zA-Z_0-9] |
\W | 알파벳 단어 문자가 아닌것: [^\w] |
- 패턴이 나오는 횟수 지정 ( X = 패턴 )
Greedy | Reluctant | Possessive | 의미 |
X? | X?? | X?+ | X가 없거나 한번 나옴 |
X* | X*? | X*+ | X가 없거나 한번 이상 나옴 |
X+ | X+? | X++ | X가 한번 또는 여러번 나옴 |
X{n} | X{n}? | X{n}+ | X가 정확히 n번 나옴 |
X{n,} | X{n,}? | X{n,}+ | X가 n번 이상 나옴 |
X{n,m} | X{n,m}? | X{n,m}+ | X가 n이상 m이하로 나옴 |
> Greedy : 매칭을 위해서 입력된 문자열 전체를 읽어서 확인하고 뒤에서 한자씩 빼면서 끝까지 확인합니다.
> Reluctant : 입력된 문자열에서 한글자씩 확인해 나갑니다. 마지막에 확인하는 것은 전체 문자열 입니다.
> Possessive : 입력된 전체 문자열을 확인합니다. Greedy와 달리 뒤에서 빼면서 확인하지 않습니다.
- 경계조건
정규식 | 설명 |
^ | 행의 시작 |
$ | 행의 끝 |
\b | 단어 경계 |
\B | 단어가 아닌것의 경계 |
\A | 입력의 시작 부분 |
\G | 이전 매치의 끝 |
\Z | 입력의 끝이지만 종결자가 있는 경우 |
\z | 입력의 끝 |
- Pattern 클래스 플래그
플래그 | 동등한 내장 표현 | 설명 |
Pattern.CANON_EQ | None | 표준화된 매칭 모드를 활성화합니다. 이 모드가 켜지면 a를 나타내는 유니코드 "\u00E5"와 a와 상단고리 유니코드를 쓴 "a\u030A"를 같다고 매칭합니다. |
Pattern.CASE_INSENSITIVE | (?i) | 대소문자를 구분하지 않습니다. |
Pattern.COMMENTS | (?x) | 공백과 주석이 무시됩니다. 주석은 #부터 그 행 끝까지 입니다. |
Pattern.MULTILINE | (?m) | 다중행 모드를 사용여 모든 ^와 $가 인식됩니다. 기본값은 입력값 전체를 하나의 시작과 끝으로 인식합니다. |
Pattern.DOTALL | (?s) | .가 개행문자 까지 포함하는 모든 문자로 매칭됩니다. |
Pattern.LITERAL | None | 입력의 메타문자와 이스케이프된 문자를 일반 문자로 취급합니다. CASE_INSENSITIVE와 UNICODE_CASE는 기능이 유지됩니다. |
Pattern.UNICODE_CASE | (?u) | 이 모드가 활성화 되면 대소문자 매칭이 유니코드 표준을 따릅니다. 기본은 US-ASCII 문자 집합을 따릅니다. |
Pattern.UNIX_LINES | (?d) | ^와 $를 처리시 UNIX 개행을 사용합니다. |
> 여러개의 플래그를 사용할 때는 | 연산자로 연결합니다.
- Matcher 클래스 메서드
메서드 | 설명 |
find() | 패턴이 일치하는 경우 true를 반환, 그 위치로 이동(여러개가 매칭되는 경우 반복 실행 됨) |
find(int start) | start 위치 이후부터 매칭검색 수행 |
start() | 매칭되는 문자열 시작위치 반환 |
start(int group) | 지정된 그룹이 매칭되는 시작위치 반환 |
end() | 매칭되는 문자열 끝 다음 문자위치 반환 |
end(int group) | 지정된 그룹이 매칭되는 끝 다음 문자위치 반환 |
group() | 매칭된 부분을 반환 |
group(int group) | 매칭된 부분 중 group번 그룹핑 매칭 부분 반환 |
groupCount() | 패턴내 그룹핑한 전체 갯수 반환 |
matches() | 패턴이 전체 문자열과 일치할 경우 true 반환 |
- 패턴 그룹핑 지정(괄호)
((A)(B(C))) => 총 4개의 그룹
0 : ((A)(B(C)))
1 : (A)
2 : (B(C))
3 : (C)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpressionsTest {
public static void main(String[] args) throws Exception {
String data = "Window98, WindowME, WindowXP, WindowNT, Window2000, WindowVista, Window7";
Pattern pattern = Pattern.compile("((Window)(98|XP|7))");
Matcher matcher = pattern.matcher(data);
while(matcher.find()) {
//matcher.group(0) => ((Window)(98|XP|7))
//matcher.group(1) => (Window)
//matcher.group(2) => (98|XP|7)
System.out.println( matcher.group(0) + " : " + matcher.group(1) + ", " + matcher.group(2) );
}
System.out.println("총 그룹핑 갯수" + matcher.groupCount());
}
}
결과
Window98 : Window98, Window
WindowXP : WindowXP, Window
Window7 : Window7, Window
총 그룹핑 갯수3
반응형
'IT' 카테고리의 다른 글
[마이크로서비스 디자인 패턴] 에지 서버 (edge server) (0) | 2021.03.27 |
---|---|
[마이크로서비스 디자인 패턴] 서비스 검색 (Service discovery) (1) | 2021.03.26 |
[Linux] Crontab 간단 설명 (0) | 2021.03.25 |
[Java] 정규표현식 메일 (0) | 2021.03.25 |
[참고사이트] 정규표현식 연습 사이트 (0) | 2021.03.25 |
Comments