Java Regex-빠른 가이드
Java는 정규식과 패턴 일치를 위해 java.util.regex 패키지를 제공합니다. Java 정규식은 Perl 프로그래밍 언어와 매우 유사하며 배우기 매우 쉽습니다.
정규식은 패턴에 포함 된 특수 구문을 사용하여 다른 문자열 또는 문자열 집합을 일치 시키거나 찾는 데 도움이되는 특수 문자 시퀀스입니다. 텍스트와 데이터를 검색, 편집 또는 조작하는 데 사용할 수 있습니다.
java.util.regex 패키지는 주로 다음 세 가지 클래스로 구성됩니다.
Pattern Class− Pattern 객체는 정규 표현식의 컴파일 된 표현입니다. Pattern 클래스는 공용 생성자를 제공하지 않습니다. 패턴을 만들려면 먼저 공개 정적 중 하나를 호출해야합니다.compile()그런 다음 Pattern 객체를 반환합니다. 이러한 메서드는 정규식을 첫 번째 인수로 받아들입니다.
Matcher Class− Matcher 객체는 패턴을 해석하고 입력 문자열에 대해 일치 작업을 수행하는 엔진입니다. Pattern 클래스와 마찬가지로 Matcher는 공용 생성자를 정의하지 않습니다. Matcher 개체는matcher() Pattern 객체의 메서드.
PatternSyntaxException − PatternSyntaxException 객체는 정규식 패턴에서 구문 오류를 나타내는 확인되지 않은 예외입니다.
그룹 캡처는 여러 문자를 단일 단위로 처리하는 방법입니다. 그룹화 할 문자를 괄호 안에 배치하여 생성됩니다. 예를 들어 정규식 (개)은 문자 "d", "o"및 "g"를 포함하는 단일 그룹을 만듭니다.
캡처 그룹은 왼쪽에서 오른쪽으로 여는 괄호를 세어 번호가 매겨집니다. 예를 들어 ((A) (B (C))) 식에는 4 개의 그룹이 있습니다.
- ((A)(B(C)))
- (A)
- (B(C))
- (C)
식에 몇 개의 그룹이 있는지 확인하려면 matcher 개체에서 groupCount 메서드를 호출합니다. groupCount 메서드는int matcher의 패턴에있는 캡처 그룹의 수를 보여줍니다.
항상 전체 표현식을 나타내는 특수 그룹 인 그룹 0도 있습니다. 이 그룹은 groupCount에 의해보고 된 총계에 포함되지 않습니다.
예
다음 예제는 주어진 영숫자 문자열에서 숫자 문자열을 찾는 방법을 보여줍니다-
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches {
public static void main( String args[] ) {
// String to be scanned to find the pattern.
String line = "This order was placed for QT3000! OK?";
String pattern = "(.*)(\\d+)(.*)";
// Create a Pattern object
Pattern r = Pattern.compile(pattern);
// Now create matcher object.
Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
} else {
System.out.println("NO MATCH");
}
}
}
이것은 다음 결과를 생성합니다-
산출
Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0
소개
그만큼 java.util.regex.MatchResult인터페이스는 일치 작업의 결과를 나타냅니다. 이 인터페이스에는 정규식에 대한 일치 결과를 결정하는 데 사용되는 쿼리 메서드가 포함되어 있습니다. 경기 경계, 그룹 및 그룹 경계는 볼 수 있지만 MatchResult를 통해 수정할 수는 없습니다.
인터페이스 선언
다음은에 대한 선언입니다. java.util.regex.MatchResult 인터페이스-
public interface MatchResult
인터페이스 방법
Sr. 아니요 | 방법 및 설명 |
---|---|
1 | int end () 일치 된 마지막 문자 이후의 오프셋을 반환합니다. |
2 | int end (int 그룹) 일치하는 동안 주어진 그룹에 의해 캡처 된 하위 시퀀스의 마지막 문자 뒤의 오프셋을 반환합니다. |
삼 | 문자열 그룹 () 이전 일치와 일치하는 입력 하위 시퀀스를 반환합니다. |
4 | 문자열 그룹 (int 그룹) 이전 일치 작업 중에 지정된 그룹이 캡처 한 입력 하위 시퀀스를 반환합니다. |
5 | int groupCount () 이 일치 결과의 패턴에서 캡처 그룹 수를 반환합니다. |
6 | int start () 일치의 시작 인덱스를 반환합니다. |
7 | int start (int 그룹) 일치하는 동안 지정된 그룹이 캡처 한 하위 시퀀스의 시작 인덱스를 반환합니다. |
소개
그만큼 java.util.regex.Pattern 클래스는 정규식의 컴파일 된 표현을 나타냅니다.
클래스 선언
다음은에 대한 선언입니다. java.util.regex.Pattern 클래스-
public final class Pattern
extends Object
implements Serializable
들
다음은 필드입니다. java.util.regex.Duration 클래스-
static int CANON_EQ − 정식 동등성을 활성화합니다.
static int CASE_INSENSITIVE − 대소 문자를 구분하지 않는 일치를 활성화합니다.
static int COMMENTS − 패턴에 공백과 주석을 허용합니다.
static int DOTALL − dotall 모드를 활성화합니다.
static int LITERAL − 패턴의 리터럴 구문 분석을 활성화합니다.
static int MULTILINE − 멀티 라인 모드를 활성화합니다.
static int UNICODE_CASE − 유니 코드 인식 대소 문자 접기를 활성화합니다.
static int UNICODE_CHARACTER_CLASS − 미리 정의 된 문자 클래스 및 POSIX 문자 클래스의 유니 코드 버전을 활성화합니다.
static int UNIX_LINES − Unix 라인 모드를 활성화합니다.
수업 방법
Sr. 아니요 | 방법 및 설명 |
---|---|
1 | 정적 패턴 컴파일 (문자열 정규식) 주어진 정규식을 패턴으로 컴파일합니다. |
2 | 정적 패턴 컴파일 (문자열 정규식, 정수 플래그) 지정된 플래그를 사용하여 지정된 정규식을 패턴으로 컴파일합니다. |
삼 | int 플래그 () 이 패턴의 일치 플래그를 반환합니다. |
4 | Matcher matcher (CharSequence 입력) 이 패턴에 대해 주어진 입력을 일치시킬 매처를 만듭니다. |
5 | 정적 부울 일치 (문자열 정규식, CharSequence 입력) 주어진 정규식을 컴파일하고 주어진 입력과 일치 시키려고 시도합니다. |
6 | 문자열 패턴 () 이 패턴이 컴파일 된 정규식을 반환합니다. |
7 | 정적 문자열 따옴표 (String s) 지정된 문자열에 대한 리터럴 패턴 문자열을 반환합니다. |
8 | String [] split (CharSequence 입력) 이 패턴의 일치 항목을 중심으로 지정된 입력 시퀀스를 분할합니다. |
9 | String [] split (CharSequence 입력, 정수 제한) 이 패턴의 일치 항목을 중심으로 지정된 입력 시퀀스를 분할합니다. |
10 | 문자열 toString () 이 패턴의 문자열 표현을 리턴합니다. |
상속 된 방법
이 클래스는 다음 클래스에서 메서드를 상속합니다-
- Java.lang.Object
소개
그만큼 java.util.regex.Matcher 클래스는 패턴을 해석하여 문자 시퀀스에 대해 일치 작업을 수행하는 엔진 역할을합니다.
클래스 선언
다음은에 대한 선언입니다. java.util.regex.Matcher 클래스-
public final class Matcher
extends Object
implements MatchResult
수업 방법
Sr. 아니요 | 방법 및 설명 |
---|---|
1 | Matcher appendReplacement (StringBuffer sb, 문자열 교체) 비 터미널 추가 및 바꾸기 단계를 구현합니다. |
2 | StringBuffer appendTail (StringBuffer sb) 터미널 추가 및 바꾸기 단계를 구현합니다. |
삼 | int end () 일치 된 마지막 문자 이후의 오프셋을 반환합니다. |
4 | int end (int 그룹) 이전 일치 작업 중에 지정된 그룹이 캡처 한 하위 시퀀스의 마지막 문자 뒤의 오프셋을 반환합니다. |
5 | 부울 find () 패턴과 일치하는 입력 시퀀스의 다음 하위 시퀀스를 찾으려고합니다. |
6 | 부울 찾기 (int start) 이 매처를 재설정 한 다음 지정된 인덱스에서 시작하여 패턴과 일치하는 입력 시퀀스의 다음 하위 시퀀스를 찾습니다. |
7 | 문자열 그룹 () 이전 일치 작업 중에 지정된 그룹이 캡처 한 입력 하위 시퀀스를 반환합니다. |
8 | 문자열 그룹 (문자열 이름) 이전 일치 작업 중에 지정된 명명 된 캡처 그룹에서 캡처 한 입력 하위 시퀀스를 반환합니다. |
9 | int groupCount () 이 매처 패턴의 캡처 그룹 수를 반환합니다. |
10 | 부울 hasAnchoringBounds () 이 매처에 대한 영역 경계의 앵커링을 쿼리합니다. |
11 | 부울 hasTransparentBounds () 이 매처에 대한 영역 경계의 투명도를 쿼리합니다. |
12 | 부울 hitEnd () 이 매 처가 수행 한 마지막 일치 작업에서 검색 엔진이 입력의 끝을 적중 한 경우 true를 반환합니다. |
13 | 부울 lookingAt () 영역의 시작에서 시작하여 패턴에 대해 입력 시퀀스를 일치 시키려고 시도합니다. |
14 | 부울 매치 () 패턴에 대해 전체 영역을 일치 시키려고 시도합니다. |
15 | 패턴 패턴 () 이 매 처가 해석하는 패턴을 리턴합니다. |
16 | 정적 문자열 quoteReplacement (String s) 지정된 문자열에 대한 리터럴 대체 문자열을 반환합니다. |
17 | Matcher 영역 (int start, int end) 이 매처 영역의 한계를 설정합니다. |
18 | int regionEnd () 이 매처 영역의 종료 인덱스 (배타적)를보고합니다. |
19 | int regionStart () 이 matcher 영역의 시작 인덱스를보고합니다. |
20 | String replaceAll (문자열 대체) 패턴과 일치하는 입력 시퀀스의 모든 하위 시퀀스를 지정된 대체 문자열로 바꿉니다. |
21 | String replaceFirst (문자열 대체) 패턴과 일치하는 입력 시퀀스의 첫 번째 하위 시퀀스를 지정된 대체 문자열로 바꿉니다. |
22 | 부울 requireEnd () 더 많은 입력이 긍정적 인 일치를 부정적인 것으로 변경할 수있는 경우 true를 반환합니다. |
23 | Matcher reset () 이 매처를 재설정합니다. |
24 | Matcher 리셋 (CharSequence 입력) 새 입력 시퀀스로이 매처를 재설정합니다. |
25 | int start () 이전 일치의 시작 인덱스를 반환합니다. |
26 | int start (int 그룹) 이전 일치 작업 중에 지정된 그룹이 캡처 한 하위 시퀀스의 시작 인덱스를 반환합니다. |
27 | MatchResult toMatchResult () 이 matcher의 일치 상태를 MatchResult로 반환합니다. |
28 | 문자열 toString () 이 매처의 문자열 표현을 리턴합니다. |
29 | Matcher useAnchoringBounds (boolean b) 이 매처에 대한 영역 경계의 고정을 설정합니다. |
30 | Matcher usePattern (Pattern newPattern) 이 Matcher가 일치 항목을 찾는 데 사용하는 패턴을 변경합니다. |
31 | 매처 useTransparentBounds (boolean b) 이 매처에 대한 영역 경계의 투명도를 설정합니다. |
상속 된 방법
이 클래스는 다음 클래스에서 메서드를 상속합니다-
- Java.lang.Object
소개
그만큼 java.util.regex.PatternSyntaxException class는 정규식 패턴의 구문 오류를 나타 내기 위해 throw되는 확인되지 않은 예외를 나타냅니다.
클래스 선언
다음은에 대한 선언입니다. java.util.regex.PatternSyntaxException 클래스-
public class PatternSyntaxException
extends IllegalArgumentException
생성자
Sr. 아니요 | 방법 및 설명 |
---|---|
1 | PatternSyntaxException(String desc, String regex, int index) 이 클래스의 새로운 인스턴스를 구축합니다. |
수업 방법
Sr. 아니요 | 방법 및 설명 |
---|---|
1 | String getDescription() 오류에 대한 설명을 검색합니다. |
2 | int getIndex() 오류 색인을 검색합니다. |
삼 | String getMessage() 구문 오류 및 해당 색인에 대한 설명, 잘못된 정규식 패턴 및 패턴 내 오류 색인의 시각적 표시를 포함하는 다중 행 문자열을 리턴합니다. |
4 | String getPattern() 잘못된 정규식 패턴을 검색합니다. |
상속 된 방법
이 클래스는 다음 클래스에서 메서드를 상속합니다-
- Java.lang.Throwable
- Java.lang.Object
예
다음 예제는 java.util.regex.Pattern.PatternSyntaxException 클래스 메소드의 사용법을 보여줍니다.
package com.tutorialspoint;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public class PatternSyntaxExceptionDemo {
private static String REGEX = "[";
private static String INPUT = "The dog says meow " + "All dogs say meow.";
private static String REPLACE = "cat";
public static void main(String[] args) {
try{
Pattern pattern = Pattern.compile(REGEX);
// get a matcher object
Matcher matcher = pattern.matcher(INPUT);
INPUT = matcher.replaceAll(REPLACE);
} catch(PatternSyntaxException e){
System.out.println("PatternSyntaxException: ");
System.out.println("Description: "+ e.getDescription());
System.out.println("Index: "+ e.getIndex());
System.out.println("Message: "+ e.getMessage());
System.out.println("Pattern: "+ e.getPattern());
}
}
}
위의 프로그램을 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
PatternSyntaxException:
Description: Unclosed character class
Index: 0
Message: Unclosed character class near index 0
[
^
Pattern: [
다음은 Java에서 정규식을 사용하여 문자를 일치시키는 다양한 예입니다.
Sr. 아니요 | 구성 및 일치 |
---|---|
1 | 엑스 문자 x |
2 | \\ 백 슬래시 문자 |
삼 | \ 0n 8 진수 값이 0n 인 문자 (0 ≤ n ≤ 7) |
4 | \ 0nn 8 진수 값이 0nn 인 문자 (0 ≤ n ≤ 7) |
5 | \ 0mnn 8 진수 값이 0mnn 인 문자 (0 ≤ m ≤ 3, 0 ≤ n ≤ 7) |
6 | \ xhh 16 진수 값이 0xhh 인 문자 |
7 | \ uhhhh 16 진수 값이 0xhhhh 인 문자 |
8 | \티 탭 문자 ( '\ u0009') |
9 | \엔 줄 바꿈 (줄 바꿈) 문자 ( '\ u000A') |
10 | \아르 자형 캐리지 리턴 문자 ( '\ u000D') |
11 | \에프 용지 공급 문자 ( '\ u000C') |
다음은 Java에서 정규식을 사용하여 문자 클래스를 일치시키는 다양한 예입니다.
Sr. 아니요 | 구성 및 일치 |
---|---|
1 | [알파벳] a, b 또는 c (단순 클래스). |
2 | [^ abc] a, b 또는 c (부정)를 제외한 모든 문자. |
삼 | [a-zA-Z] a-z 또는 A-Z, 포함 (범위). |
4 | [광고 [mp]] a-d 또는 m-p : [a-dm-p] (union). |
5 | [az && [def]] d, e 또는 f (교차). |
6 | [az && [^ bc]] a-z, b 및 c 제외 : [ad-z] (빼기) |
7 | [az && [^ mp]] m부터 p까지가 아닌 a부터 z까지 : [a-lq-z] (빼기). |
다음은 Java에서 정규식을 사용하여 미리 정의 된 문자 클래스를 일치시키는 다양한 예입니다.
Sr. 아니요 | 구성 및 일치 |
---|---|
1 | . 모든 문자 (줄 종결 자와 일치하거나 일치하지 않을 수 있음). |
2 | \디 숫자 : [0-9]. |
삼 | \디 숫자가 아닌 경우 : [^ 0-9]. |
4 | \에스 공백 문자 : [\ t \ n \ x0B \ f \ r] |
5 | \에스 공백이 아닌 문자 : [^ \ s]. |
6 | \ w 단어 문자 : [a-zA-Z_0-9]. |
7 | \ W 비 단어 문자 : [^ \ w] |
다음은 java에서 정규식을 사용하여 POSIX 문자 클래스를 일치시키는 다양한 예입니다.
Sr. 아니요 | 구성 및 일치 |
---|---|
1 | \ p {낮음} 소문자 알파벳 문자 : [az]. |
2 | \ p {위쪽} 알파벳 대문자 : [AZ]. |
삼 | \ p {ASCII} 모든 ASCII : [\ x00- \ x7F]. |
4 | \ p {알파} 알파벳 문자 : [\ p {Lower} \ p {Upper}]. |
5 | \ p {자리} 10 진수 : [0-9]. |
6 | \ p {연명} 영숫자 문자 : [\ p {Alpha} \ p {Digit}]. |
7 | \ p {펑트} 구두점 :! "# $ % & '() * +,-. / :; <=>? @ [\] ^ _> {|} <중 하나. |
8 | \ p {그래프} 보이는 문자 : [\ p {Alnum} \ p {Punct}]. |
9 | \ p {인쇄} 인쇄 가능한 문자 : [\ p {Graph} \ x20]. |
10 | \ p {공백} 공백 또는 탭 : [\ t]. |
11 | \ p {XDigit} 16 진수 : [0-9a-fA-F]. |
12 | \ p {스페이스} 공백 문자 : [\ t \ n \ x0B \ f \ r]. |
다음은 Java에서 정규식을 사용하여 JAVA 문자 클래스를 일치시키는 다양한 예입니다.
Sr. 아니요 | 구성 및 일치 |
---|---|
1 | \ p {javaLowerCase} java.lang.Character.isLowerCase ()와 동일합니다. |
2 | \ p {javaUpperCase} java.lang.Character.isUpperCase ()와 동일합니다. |
삼 | \ p {javaWhitespace} java.lang.Character.isWhitespace ()와 동일합니다. |
4 | \ p {javaMirrored} java.lang.Character.isMirrored ()와 동일합니다. |
다음은 Java에서 정규식을 사용하여 유니 코드 문자 클래스를 일치시키는 다양한 예입니다.
Sr. 아니요 | 구성 및 일치 |
---|---|
1 | \ p {IsLatin} 라틴 스크립트 문자입니다. |
2 | \ p {InGreek} 그리스 블록의 캐릭터. |
삼 | \ p {루} 대문자. |
4 | \ p {IsAlphabetic} 알파벳 문자 (이진 속성). |
5 | \ p {Sc} 통화 기호. |
6 | \ P {InGreek} 그리스 블록에서 하나를 제외한 모든 문자. |
7 | [\ p {L} && [^ \ p {Lu}]] 대문자를 제외한 모든 문자. |
다음은 Java에서 정규식을 사용하는 Boundary Matchers의 다양한 예입니다.
Sr. 아니요 | 구성 및 일치 |
---|---|
1 | ^ 줄의 시작. |
2 | $ 줄의 끝. |
삼 | \비 단어 경계. |
4 | \비 비 단어 경계. |
5 | \ㅏ 입력의 시작입니다. |
6 | \지 이전 경기의 끝. |
7 | \지 입력의 끝이지만 최종 종결 자 (있는 경우)입니다. |
8 | \지 입력의 끝입니다. |
탐욕스러운 수량자는 전체 문자열을 검색하고 주어진 정규 표현식과 일치하는지 확인하도록 검색 엔진에 표시합니다. 다음은 Java에서 정규식을 사용하는 Greedy Quantifiers의 다양한 예입니다.
Sr. 아니요 | 구성 및 일치 |
---|---|
1 | 엑스? X, 한 번 또는 전혀. |
2 | 엑스* X, 0 회 이상 |
삼 | X + X, 한 번 이상. |
4 | X {n} X, 정확히 n 번. |
5 | X {n,} X, 적어도 n 번. |
6 | X {n, m} X, n 회 이상 m 회 이하 |
꺼리는 한정 기호는 검색 엔진이 가능한 가장 짧은 문자열로 시작 함을 나타냅니다. 일치가 발견되면 엔진이 계속됩니다. 그렇지 않으면 검사되는 문자열의 섹션에 한 문자를 추가하고 검색하는 식입니다. 이 프로세스는 일치하는 항목을 찾거나 전체 문자열이 사용되었을 때까지 계속됩니다. 다음은 Java에서 정규식을 사용하는 Reluctant Quantifiers의 다양한 예입니다.
Sr. 아니요 | 구성 및 일치 |
---|---|
1 | 엑스?? X, 한 번 또는 전혀. |
2 | 엑스*? X, 0 회 이상 |
삼 | X +? X, 한 번 이상. |
4 | X {n}? X, 정확히 n 번. |
5 | X {n,}? X, 적어도 n 번. |
6 | X {n, m}? X, n 회 이상 m 회 이하 |
소유 한정자는 탐욕스러운 한정자와 유사합니다. 전체 문자열을 확인하여 엔진을 시동하는 것을 나타내며, 작동하지 않는 경우, 매치가 실패한 경우, 뒤를 돌아 보지 않는 경우의 의미가 다릅니다. 다음은 Java에서 정규식을 사용하는 소유 수량 자의 다양한 예입니다.
Sr. 아니요 | 구성 및 일치 |
---|---|
1 | X? + X, 한 번 또는 전혀. |
2 | X * + X, 0 회 이상 |
삼 | X ++ X, 한 번 이상. |
4 | X {n} + X, 정확히 n 번. |
5 | X {n,} + X, 적어도 n 번. |
6 | X {n, m} + X, n 회 이상 m 회 이하 |
다음은 java에서 정규식을 사용하는 논리 연산자의 다양한 예입니다.
Sr. 아니요 | 구성 및 일치 |
---|---|
1 | XY X 다음에 Y. |
2 | X | Y X 또는 Y입니다. |