그만큼 자바 정규식 또는 정규식은 다음을 수행하는 API입니다. 문자열을 검색하거나 조작하기 위한 패턴 정의 .
이는 비밀번호 및 이메일 검증과 같은 문자열에 대한 제약 조건을 정의하는 데 널리 사용됩니다. Java 정규식 튜토리얼을 학습한 후에는 Java 정규식 테스터 도구를 사용하여 정규식을 테스트할 수 있습니다.
Java Regex API는 1개의 인터페이스와 3개의 클래스를 제공합니다. java.util.regex 패키지.
java.util.regex 패키지
Matcher 및 Pattern 클래스는 Java 정규식 기능을 제공합니다. java.util.regex 패키지는 정규식에 대해 다음과 같은 클래스와 인터페이스를 제공합니다.
- MatchResult 인터페이스
- 매처 클래스
- 패턴 수업
- PatternSyntaxException 클래스
매처 클래스
이는 다음을 구현합니다. 일치 결과 상호 작용. 이것은 정규식 엔진 이는 문자 시퀀스에 대한 일치 작업을 수행하는 데 사용됩니다.
아니요. | 방법 | 설명 |
---|---|---|
1 | 부울 일치() | 정규식이 패턴과 일치하는지 테스트합니다. |
2 | 부울 찾기() | 패턴과 일치하는 다음 표현식을 찾습니다. |
삼 | 부울 찾기(int 시작) | 주어진 시작 번호의 패턴과 일치하는 다음 표현식을 찾습니다. |
4 | 문자열 그룹() | 일치하는 하위 시퀀스를 반환합니다. |
5 | 정수 시작() | 일치하는 하위 시퀀스의 시작 인덱스를 반환합니다. |
6 | 의도하다() | 일치하는 하위 시퀀스의 끝 인덱스를 반환합니다. |
7 | 정수 그룹카운트() | 일치하는 하위 시퀀스의 총 개수를 반환합니다. |
패턴 수업
그것은 정규식의 컴파일된 버전 . 정규식 엔진의 패턴을 정의하는 데 사용됩니다.
아니요. | 방법 | 설명 |
---|---|---|
1 | 정적 패턴 컴파일(문자열 정규식) | 주어진 정규식을 컴파일하고 패턴의 인스턴스를 반환합니다. |
2 | Matcher matcher(CharSequence 입력) | 주어진 입력과 패턴을 일치시키는 매처를 생성합니다. |
삼 | 정적 부울 일치(문자열 정규식, CharSequence 입력) | 이는 컴파일 방법과 일치 방법의 조합으로 작동합니다. 정규식을 컴파일하고 주어진 입력을 패턴과 일치시킵니다. |
4 | String[] 분할(CharSequence 입력) | 주어진 패턴과 일치하는 항목을 중심으로 주어진 입력 문자열을 분할합니다. |
5 | 문자열 패턴() | 정규식 패턴을 반환합니다. |
Java 정규 표현식의 예
Java로 정규식 예제를 작성하는 방법에는 세 가지가 있습니다.
import java.util.regex.*; public class RegexExample1{ public static void main(String args[]){ //1st way Pattern p = Pattern.compile('.s');//. represents single character Matcher m = p.matcher('as'); boolean b = m.matches(); //2nd way boolean b2=Pattern.compile('.s').matcher('as').matches(); //3rd way boolean b3 = Pattern.matches('.s', 'as'); System.out.println(b+' '+b2+' '+b3); }}지금 테스트해보세요
산출
true true true
정규식 . 예
. (점)은 단일 문자를 나타냅니다.
import java.util.regex.*; class RegexExample2{ public static void main(String args[]){ System.out.println(Pattern.matches('.s', 'as'));//true (2nd char is s) System.out.println(Pattern.matches('.s', 'mk'));//false (2nd char is not s) System.out.println(Pattern.matches('.s', 'mst'));//false (has more than 2 char) System.out.println(Pattern.matches('.s', 'amms'));//false (has more than 2 char) System.out.println(Pattern.matches('..s', 'mas'));//true (3rd char is s) }}지금 테스트해보세요
정규식 문자 클래스
아니요. | 캐릭터 클래스 | 설명 |
---|---|---|
1 | [알파벳] | a, b 또는 c(간단한 클래스) |
2 | [^abc] | a, b, c를 제외한 모든 문자(부정) |
삼 | [a-zA-Z] | a~z 또는 A~Z(포함)(범위) |
4 | [a-d[m-p]] | a~d 또는 m~p: [a-dm-p](합집합) |
5 | [a-z&&[def]] | d, e 또는 f(교차로) |
6 | [az&&[^bc]] | a ~ z(b 및 c 제외): [ad-z](뺄셈) |
7 | [a-z&&[^m-p]] | a부터 z까지, m부터 p까지는 아님: [a-lq-z](뺄셈) |
정규식 문자 클래스 예
import java.util.regex.*; class RegexExample3{ public static void main(String args[]){ System.out.println(Pattern.matches('[amn]', 'abcd'));//false (not a or m or n) System.out.println(Pattern.matches('[amn]', 'a'));//true (among a or m or n) System.out.println(Pattern.matches('[amn]', 'ammmna'));//false (m and a comes more than once) }}지금 테스트해보세요
정규식 수량자
수량자는 문자의 발생 횟수를 지정합니다.
정규식 | 설명 |
---|---|
엑스? | X는 한 번 발생하거나 전혀 발생하지 않습니다. |
X+ | X가 한 번 이상 발생함 |
엑스* | X가 0번 이상 발생합니다. |
X{n} | X는 n번만 발생합니다. |
X{n,} | X가 n번 이상 발생함 |
X{y,z} | X는 적어도 y번 발생하지만 z번 미만 발생합니다. |
정규식 문자 클래스 및 수량자 예
import java.util.regex.*; class RegexExample4{ public static void main(String args[]){ System.out.println('? quantifier ....'); System.out.println(Pattern.matches('[amn]?', 'a'));//true (a or m or n comes one time) System.out.println(Pattern.matches('[amn]?', 'aaa'));//false (a comes more than one time) System.out.println(Pattern.matches('[amn]?', 'aammmnn'));//false (a m and n comes more than one time) System.out.println(Pattern.matches('[amn]?', 'aazzta'));//false (a comes more than one time) System.out.println(Pattern.matches('[amn]?', 'am'));//false (a or m or n must come one time) System.out.println('+ quantifier ....'); System.out.println(Pattern.matches('[amn]+', 'a'));//true (a or m or n once or more times) System.out.println(Pattern.matches('[amn]+', 'aaa'));//true (a comes more than one time) System.out.println(Pattern.matches('[amn]+', 'aammmnn'));//true (a or m or n comes more than once) System.out.println(Pattern.matches('[amn]+', 'aazzta'));//false (z and t are not matching pattern) System.out.println('* quantifier ....'); System.out.println(Pattern.matches('[amn]*', 'ammmna'));//true (a or m or n may come zero or more times) }}지금 테스트해보세요
정규식 메타 문자
정규식 메타 문자는 단축 코드로 작동합니다.
정규식 | 설명 |
---|---|
. | 모든 문자(종료자와 일치할 수도 있고 일치하지 않을 수도 있음) |
디 | [0-9]보다 짧은 임의의 숫자 |
디 | 숫자가 아닌 모든 것, [^0-9]의 약어 |
에스 | 공백 문자([ x0Bf ]의 약자) |
에스 | 공백이 아닌 문자([^s]의 약어) |
안에 | [a-zA-Z_0-9]의 약어인 모든 단어 문자 |
안에 | 단어가 아닌 문자([^w]의 약자) |
비 | 단어 경계 |
비 | 비단어 경계 |
정규식 메타 문자 예
import java.util.regex.*; class RegexExample5{ public static void main(String args[]){ System.out.println('metacharacters d....');\d means digit System.out.println(Pattern.matches('\d', 'abc'));//false (non-digit) System.out.println(Pattern.matches('\d', '1'));//true (digit and comes once) System.out.println(Pattern.matches('\d', '4443'));//false (digit but comes more than once) System.out.println(Pattern.matches('\d', '323abc'));//false (digit and char) System.out.println('metacharacters D....');\D means non-digit System.out.println(Pattern.matches('\D', 'abc'));//false (non-digit but comes more than once) System.out.println(Pattern.matches('\D', '1'));//false (digit) System.out.println(Pattern.matches('\D', '4443'));//false (digit) System.out.println(Pattern.matches('\D', '323abc'));//false (digit and char) System.out.println(Pattern.matches('\D', 'm'));//true (non-digit and comes once) System.out.println('metacharacters D with quantifier....'); System.out.println(Pattern.matches('\D*', 'mak'));//true (non-digit and may come 0 or more times) }}지금 테스트해보세요
정규식 질문 1
/*Create a regular expression that accepts alphanumeric characters only. Its length must be six characters long only.*/ import java.util.regex.*; class RegexExample6{ public static void main(String args[]){ System.out.println(Pattern.matches('[a-zA-Z0-9]{6}', 'arun32'));//true System.out.println(Pattern.matches('[a-zA-Z0-9]{6}', 'kkvarun32'));//false (more than 6 char) System.out.println(Pattern.matches('[a-zA-Z0-9]{6}', 'JA2Uk2'));//true System.out.println(Pattern.matches('[a-zA-Z0-9]{6}', 'arun$2'));//false ($ is not matched) }}
지금 테스트해보세요
정규식 질문 2
/*Create a regular expression that accepts 10 digit numeric characters starting with 7, 8 or 9 only.*/ import java.util.regex.*; class RegexExample7{ public static void main(String args[]){ System.out.println('by character classes and quantifiers ...'); System.out.println(Pattern.matches('[789]{1}[0-9]{9}', '9953038949'));//true System.out.println(Pattern.matches('[789][0-9]{9}', '9953038949'));//true System.out.println(Pattern.matches('[789][0-9]{9}', '99530389490'));//false (11 characters) System.out.println(Pattern.matches('[789][0-9]{9}', '6953038949'));//false (starts from 6) System.out.println(Pattern.matches('[789][0-9]{9}', '8853038949'));//true System.out.println('by metacharacters ...'); System.out.println(Pattern.matches('[789]{1}\d{9}', '8853038949'));//true System.out.println(Pattern.matches('[789]{1}\d{9}', '3853038949'));//false (starts from 3) }}지금 테스트해보세요
Java 정규식 찾기 예
import java.util.regex.Pattern; import java.util.Scanner; import java.util.regex.Matcher; public class RegexExample8{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); while (true) { System.out.println('Enter regex pattern:'); Pattern pattern = Pattern.compile(sc.nextLine()); System.out.println('Enter text:'); Matcher matcher = pattern.matcher(sc.nextLine()); boolean found = false; while (matcher.find()) { System.out.println('I found the text '+matcher.group()+' starting at index '+ matcher.start()+' and ending at index '+matcher.end()); found = true; } if(!found){ System.out.println('No match found.'); } } } }
산출:
Enter regex pattern: java Enter text: this is java, do you know java I found the text java starting at index 8 and ending at index 12 I found the text java starting at index 26 and ending at index 30